我有一个以TestStr
和TestBool
作为属性的视图模型。如果我提交表单,则只有TestStr
值被设置为绑定视图模型,而不是TestBool
。 TestBool
的表单集合中的值设置为"on"
,问题是什么?是否应将其设置为true
才能将其标记为true?
我的c#视图模型:
public class MyViewModel {
public bool TestStr { get; set; }
public bool TestBool { get; set; }
}
我的剃刀视图,在表格中:
<input name="TestStr" value="this is getting set in my MVC action" />
<input name="TestBool" checked=checked /> // this always gets set to false, even tho it's checked
我的MVC行动:
public ActionResult(MyViewModel vm) {
// vm.TestBool is always false
}
我注意到,如果我使用@Html.CheckBoxFor(...)
,它会在我的MVC操作中正确绑定它。是否可以使用键入的html执行此操作?只因为我有一些我正在使用的集合,所以我不得不为每个集合提供输入名称。
答案 0 :(得分:0)
因为如果没有选中复选框,复选框就不会回发。 HTML帮助程序实际上为未经检查的版本添加了一个隐藏字段,然后正确解决了冲突(已选中/未选中)。
如果您想保留其他字段,但又不想显示它们,可以使用Html.HiddenFor
来保存这些值。
这篇文章显示了same issue
的人