将对象列表绑定到控制器MVC模型时获取Null

时间:2019-04-26 06:44:31

标签: asp.net-mvc model-binding

我在绑定包含用于Editing方法的对象列表的模型时遇到麻烦。这是SET TODAY=%date:~10,4%%date:~4,2%%date:~7,2% 的列表,其中包括另一个对象(Factory)的列表。

当我从Controller传递数据到View时没有问题。但是,当我尝试将数据从View发送回Controller时,某些模型的属性始终为null。

模型是:

FactoryHotline

这是视图:

public class Factory 
    {
        public Guid Id { get; set; }
        public string Name { get; set; }
        public List<FactoryHotline> FactoryHotlineList { get; set; }
}

public class FactoryHotline 
    {
        public Guid Id { get; set; }

        public Guid FactoryId { get; set; }

        public string Caption { get; set; }

        public string Hotline { get; set; }
    }

在我的控制器中,编辑方法为:

@model List<WebDataLayer.Models.Factory>

<form action="/Factories/Edit" method="POST" enctype="multipart/form-data">
@Html.AntiForgeryToken()
<div class="form-horizontal">
        <table id="factoriesTable">
            <thead>
                <tr>
                    <th>Name</th>
                    <th class="Hotline1" >Hotline 1</th>
                    <th class="Hotline2" >Hotline 2</th>
                </tr>
            </thead>
            <tbody>
                @for (int i = 0; i < Model.Count; i++)
                {
                    @Html.HiddenFor(model => model[i].Id)
                     <tr>
                         <td>@Model[i].Name</td>

                        @for (int h = 0; h < Model[i].FactoryHotlineList.Count; h++)
                        {
                            <td>
                                <div>
                                    <b>Caption: </b>
                                    @Html.EditorFor(model => model[i].FactoryHotlineList[h].Caption, new { htmlAttributes = new { @class = "form-control ShortInput", id = "captionInput", maxlength = "39" } })
                                </div>
                                <div>
                                    <b>Hotline:</b>
                                    @Html.EditorFor(model => model[i].FactoryHotlineList[h].Hotline, new { htmlAttributes = new { @class = "form-control ShortInput", id = "hotlineInput", maxlength = "15" } })
                                    @Html.ValidationMessageFor(model => model[i].FactoryHotlineList[h].Hotline)
                                </div>
                            </td>
                        }
                    </tr>
                }
            </tbody>
        </table>
</form>

只有ID有值, [HttpPost] [ValidateAntiForgeryToken] public ActionResult Edit (List<Factory> factories) { } 中的另一个(标题,热线)始终为空

这就是我如何将数据从Controller传递到View

List<Factory> factories

我使用Entity Framework正常工作。

1 个答案:

答案 0 :(得分:-1)

那是因为您使用HiddenFor来将id保留为隐藏字段。要在回发中具有该值,它应该是输入元素(输入,选择,复选框,文本区域等)的一部分或作为隐藏字段。

@Html.HiddenFor(model => model[i].Name)

在这种情况下,我建议使用viewmodel along with automapper