我试图从@ Html.CheckBoxFor传递给控制器,但它没有传递真值。我有ViewModel包含另一个ViewModel的IList,其中包含bool isSelected,似乎没有传递。代码看起来像那样
public class PackageItemsViewModel
{
public IList<ItemsViewModel> items{ get; set; }
}
public class ItemsViewModel
{
[Key]
public int Id { get; set; }
[Required]
public string Type { get; set; }
public bool isSelected { get; set; }
}
并在视图中
@for (var i = 0; i < Model.items.Count; i++)
{
<tr>
@Html.HiddenFor(x => x.devices[i].Id)
<td>
@Html.HiddenFor(x => x.items[i].isSelected)
@Html.CheckBoxFor(x => x.items[i].isSelected)
</td>
</tr>
}
答案 0 :(得分:1)
DefaultModelBinder
仅将匹配属性找到的第一个值绑定。在您的情况下,@Html.HiddenFor(x => x.items[i].isSelected)
呈现您发送到视图的初始值,并且因为它在复选框之前,您将只绑定到该初始值(您的复选框被忽略)。
只需删除@Html.HiddenFor(x => x.items[i].isSelected)
,即可正确绑定值。
请注意,CheckBoxFor()
方法会同时生成一个复选框(value="true"
}和隐藏输入value="false"
,因此如果选中该复选框,则会true
和{{}已发布1}}(但仅绑定了false
),如果未选中,则仅发布true
。