首页 > 解决方案 > 无法将 CSHTML 中的视图模型列表传递给控制器

问题描述

我有一个视图模型、视图和控制器,可以很好地显示数据,但我无法将表单中输入的数据保存到控制器。我尝试过为视图模型使用列表、数组和列表。

这是我的视图模型:

public class AssignedHostData
{

    public int HostID { get; set; }
    public string HostName { get; set; }
    public bool Assigned { get; set; }
    [DisplayName("Additional Details")]
    [DataType(DataType.MultilineText)]
    public string AddDetails { get; set; }
}

这是我的视图中显示数据的部分:

<table class="table">
    <tr>
        @{
            int cnth = 0;
            List<Support_Web.Models.ViewModels.AssignedHostData> hosts = ViewBag.Hosts;

            foreach (var host in hosts)
            {
                if (cnth++ % 1 == 0)
                {
                    @:</tr><tr>
                }
                @:<td>
                    <input type="checkbox"
                        name="selectedHosts[@cnth].HostID"
                        id="selectedHosts_[@cnth]_HostID"
                        value="@host.HostID"
                        @(Html.Raw(host.Assigned ? "checked=\"checked\"" : "")) />
                    @host.HostID @:  @host.HostName
                @:</td>
                @:<td>
                    <input type="text" name="selectedHosts[@cnth].AddDetails" id="selectedHosts_[@cnth]_AddDetails" value="@host.AddDetails" />
                @:</td>
            }
        @:</tr>
    }
</table>

这是我的编辑控制器的参数。该selectedProducts列表每次返回一个空列表:

public async Task<IActionResult> Edit(int? id, string[] selectedProducts, List<HostCheckListItem> selectedHosts)

标签: asp.netasp.net-mvcasp.net-core

解决方案


我的视图需要这样格式化:

@{
                                        int cnth = 0;
                                        List<Support_Web.Models.ViewModels.AssignedHostData> hosts = ViewBag.Hosts;
                                        for (int i = 0; i < hosts.Count; i++)
                                        {
                                <tr>
                                            <td>
                                                <input type="checkbox"
                                                       name="selectedHosts[@i].HostID"
                                                       value="@hosts[@i].HostID"
                                                       @(Html.Raw(hosts[@i].Assigned ? "checked=\"checked\"" : "")) />
                                                @hosts[@i].HostName
                                            </td>
                                            <td>
                                                <input type="text" name="selectedHosts[@i].AddDetails" value="@hosts[@i].AddDetails" />
                                            </td>
                                    </tr>}
                                        }

推荐阅读