MVC Form将null模型返回给控制器

时间:2017-11-15 17:13:57

标签: asp.net-mvc

View有一个项目列表,每个项目都有一个复选框。表单的目的是检查框然后将列表返回到数据库。我希望看到ViewModel中的PickList模型填充了隐藏的seedid和复选框值,但是表单总是以PickList为空提交。

@model Inventory.ViewModels.ExtractionViewModel

<div class="col-md-4">
    <button class="btn btn-primary" type="submit" form="pick-list-form">Update Pick List</button>
</div>

@using (Html.BeginForm("UpdatePickList", "Extraction", FormMethod.Post, new { @id = "pick-list-form" }))
{
    <table class="table">
        <tr>
            <th>
                Seed Reference
            </th>
            <th>Extracted?</th>
        </tr>

        @foreach (var item in Model.PickList)
        {
            <tr>
                <td>
                    @Html.HiddenFor(modelItem => item.ExtractionId)
                    @Html.HiddenFor(modelItem => item.SeedId)
                    @Html.DisplayFor(modelItem => item.SeedId)
                </td>
                <td>
                    @Html.CheckBoxFor(modelItem => item.IsExtracted)
                </td>
            </tr>
        }
    </table>
}

View Model

public class ExtractionViewModel
{
    public ExtractionDTO Extraction{ get; set; }
    public List<PickListDTO> PickList { get; set; }
}

Pick list model

public class PickListDTO
{
    public int ExtractionId { get; set; }
    public int SeedId { get; set; }
    public bool IsExtracted { get; set; }
}

1 个答案:

答案 0 :(得分:0)

使用@Html.DisplayFor可能会导致模型以NULL格式发回。您可以使用@Html.TextBoxFor

只是提醒一下:

如果您想提供用户不需要注意的发布数据,请使用HiddenFor

如果要显示记录但不允许对其进行编辑,请使用DisplayFor

如果您想允许用户输入或允许用户编辑字段,请使用TextBoxFor

我希望它可以帮到你!