抱歉,如果之前有人问过这个问题;有一百万种表达方式,因此事实证明很难找到答案。
我有一个具有以下属性的视图模型:
public class AssignSoftwareLicenseViewModel
{
public int LicenseId { get; set; }
public ICollection<SelectableDeviceViewModel> Devices { get; set; }
}
SelectableDeviceViewModel 的简化版本是这样的:
public class SelectableDeviceViewModel
{
public int DeviceInstanceId { get; set; }
public bool IsSelected { get; set; }
public string Name { get; set; }
}
在我的视图中,我试图在输入表单中显示 Devices 属性的可编辑复选框列表。目前,我的视图如下所示:
@using (Html.BeginForm())
{
@Html.HiddenFor(x => Model.LicenseId)
<table>
<tr>
<th>Name</th>
<th></th>
</tr>
@foreach (SelectableDeviceViewModel device in Model.Devices)
{
@Html.HiddenFor(x => device.DeviceInstanceId)
<tr>
<td>@Html.CheckBoxFor(x => device.IsSelected)</td>
<td>@device.Name</td>
</tr>
}
</table>
<input type="submit" value="Assign" />
}
问题是,当模型被发送回控制器时,Devices 为空。
我的假设是这种情况正在发生,因为即使我正在编辑其内容,Devices 属性也从未明确包含在表单中。我尝试将它包含在 HiddenFor 中,但这只是导致模型有一个空列表而不是 null。
知道我在这里做错了什么吗?