首页 > 代码库 > @Html.CheckBoxFor为何输出两种控件
@Html.CheckBoxFor为何输出两种控件
在MVC中当使用@Html.CheckBoxFor时表单上会产生两种控件checkbox和hidden,比如:
@Html.CheckBoxFor(model => model.IsTop)
对应
<input type ="checkbox" id="IsTop" name="IsTop" value=http://www.mamicode.com/"true"/>>为何???且看关与Checkbox value 属性的定义和使用:
value 属性可设置或者返回 checkbox 的value属性值。
复选框的 value 属性值不会显示在用户界面中。value 属性用于表单数据的提交(只有选中的复选框才会传递数据到服务端,如果什么都没选则不传递复选框数据)。
至此就应该明白了。
当未选中复选框时,在Controller中接受到的数据为”false”,该值来自hidden控件,checkbox的值不会被传递,所以如果没有同名的hidden控件,那么在Controller中是得不到[IsTop]参数的。
当选中复选框时,在Controller中接受到的数据就为”true,false”。
那么问题又来了,字符串”false”,”true”可以转换成bool类型,那么”true,false”也可以吗?答案自然是不可以的。
那MVC中又是如何转换的呢?这里恕我没查源码,不能告知,但可以猜测是做了字符串的分割,以”,”为分隔符,取第一个子字符串。
另外如果我们不使用HTML辅助方法的形式,而是直接写两种控件,需要注意checkbox和hidden控件的顺序不能颠倒,不然绑定到的值一直为”false”。
在一注意,checkbox选中时value默认值为”on”,需要显示为value赋值为”true”。
说明:示例中的[IsTop]字段为bool类型。
@Html.CheckBoxFor为何输出两种控件
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。