在ASP.NET MVC RC中的
Html.CheckBox中提交值的疯狂问题
一些值只是不来Request.Params
在我的表格中,我在循环中有这一行:
<%= Html.CheckBox(“cb”p.Option.Id,p.Option.IsAllowed,new {value = 6})%>
并呈现给下一个:
<input checked="checked" id="cb17" name="cb17" type="checkBox" value="6" /> <input name="cb17" type="hidden" value="false" /> <input checked="checked" id="cb18" name="cb18" type="checkBox" value="6" /> <input name="cb18" type="hidden" value="false" /> <input id="cb19" name="cb19" type="checkBox" value="6" /> <input name="cb19" type="hidden" value="false" /> <input id="cb20" name="cb20" type="checkBox" value="6" /> <input name="cb20" type="hidden" value="false" /> <input checked="checked" id="cb21" name="cb21" type="checkBox" value="6" /> <input name="cb21" type="hidden" value="false" />
提交表单后,我会得到以下内容:
Form.Params["cb17"] = {6,"false"} Form.Params["cb18"] = {6,"false"} Form.Params["cb19"] = {"false"} Form.Params["cb20"] = {"6,false"} Form.Params["cb21"] = {"false"}
在请求字符串中,一些参数显示两次(正常情况),一些只显示一次(只有隐藏字段的值).
似乎它不依赖于复选框是否被检查,值是否改变了…
有人面对这样的情况吗?我如何解决?
解决方法
<% using(Html.BeginForm("Retrieve","Home")) %>//Retrieve is the name of the action while Home is the name of the controller <% { %> <%foreach (var app in newApps) { %> <tr> <td><%=Html.CheckBox(""+app.ApplicationId )%></td> </tr> <%} %> <input type"submit"/> <% } %>
并在您的控制器
List<app>=newApps; //Database bind for(int i=0; i<app.Count;i++) { var checkBox=Request.Form[""+app[i].ApplicationId]; if(checkBox!="false")// if not false then true,false is returned }
你检查错误的原因是因为Html CheckBox帮助者为某种价值真的做了一些奇怪的事情
真的返回为:
it makes the string read "true,false"
所以你可能以为这是两个价值观,但它只是一个,意思是真实的
虚假回报为:
it makes the string read "false"