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; }
}
答案 0 :(得分:0)
使用@Html.DisplayFor
可能会导致模型以NULL格式发回。您可以使用@Html.TextBoxFor
。
只是提醒一下:
如果您想提供用户不需要注意的发布数据,请使用HiddenFor
。
如果要显示记录但不允许对其进行编辑,请使用DisplayFor
。
如果您想允许用户输入或允许用户编辑字段,请使用TextBoxFor
。
我希望它可以帮到你!