在asp.net mvc 下 checkbox的值怎么获取?
微软的MVC框架出了有一段时间了,最近在用它做个东西,使用过程中发现了一个小问题就是Html.CheckBox方法生成的Checkbox的值在服务器端获取出现异常,于是仔细研究了一下它的源代码,找到了原因。
我本以为可以有个bool.TryPrase方法进行转换,但是不行,永远返回false值,于是查看了一下源代码,发现Html.CheckBox方法生成的html代码里面不仅有一个input type=checkbox,还有一个input type=hidden,而且2个的name属性是一样的,这样的话提交到服务器上会是一个已,号连接的字符串,bool.TryPrase方法肯定返回false了,但是为什么这样呢?
于是下载了mvc的源代码,发现了如下的注释:
Render an additional <input type="hidden".../>
for checkboxes. This addresses scenarios where unchecked checkboxes are not sent in the request. Sending a hidden input makes it possible to know that the checkbox was present on the page when the request was submitted.
原来是这样,如果checkbox不选的话是不会有数据提交到服务器端的,所以程序自动加了一个hidden,这样无论checkbox选择没选择,都会有数据提交到服务器端,,可能是为了方便程序处理把。
那么这样的话
如果checkbox被选中,则服务器收到的true,false。
checkbox未选中,因为有hidden的input存在所以服务器则收到flase。
那么,我们用如下代码即可获得checkbox的选中状态
-
Request.forms[Key].Contains("true");