从视图到控制器的IEnumerable模型为NULL

时间:2018-07-06 15:03:19

标签: ajax asp.net-mvc ienumerable

我正在尝试将视图的表值返回给控制器以保存在db上,但是我一直在获取null。我可以毫无问题地发布值并将它们绑定到视图。

我不明白为什么,我正在使用服务器侧视图模型。

有什么方法可以执行此操作吗?

查看:

@model  IEnumerable<MultiEdit.Models.TableViewModel>

@using (Ajax.BeginForm("Save", "UUTs", new AjaxOptions
{
    HttpMethod = "Post",

}, new { id = "tableForm" }))
{
    @Html.AntiForgeryToken()
    <div class="row" style="padding-top:10px;">
        <div class="col-lg-12">
            <table class="table table-bordered table-striped ">
                <thead>
                    <tr>
                        <th>
                            @Html.DisplayNameFor(model => model.IsChassis)
                        </th>
                        <th>
                            @Html.DisplayNameFor(model => model.Justification)
                        </th>
                    </tr>
                </thead>
                <tbody id="tblMultiEdit">
                    @foreach(var item in Model)
                    {
                        <tr>
                            <td>
                                @Html.CheckBoxFor(modelItem => item.CheckIsChassis)
                            </td>
                            <td>
                                @Html.EditorFor(modelItem => item.Justification)
                            </td>
                        </tr>
                    }
                </tbody>
            </table>
        </div>
    </div>
}

控制器:

public void Save(IEnumerable<TableViewModel> vm)
        {
            DoSomething();
        }

2 个答案:

答案 0 :(得分:0)

您需要使用for循环和索引限定符遍历集合。如下所示。语法不正确,但是您应该能够理解我的意思。

@for(var index = 0; index <= Model.Count - 1; index++)
{
     <tr>
         <td>
             @Html.CheckBoxFor(modelItem => Model[index].CheckIsChassis)
         </td>
         <td>
             @Html.EditorFor(modelItem => Model[index].Justification)
         </td>
     </tr>
 }

这是必需的,因此索引可用于创建Enumerable项目的唯一ID并辅助模型绑定

希望有帮助

答案 1 :(得分:0)

我使用IEnumerable的IList insead解决了它。

查看:

@model IList<MultiEdit.Models.TableViewModel>

@Html.CheckBoxFor(modelItem => modelItem[index].CheckIsChassis, new { @class = "form-control" })

控制器:

public void Save(IList<TableViewModel> vm)
    {
        var x = vm;
    }