Asp.net mvc 3 MVC3 WebGrid页面/排序问题,页面上其他地方有一个复选框

Asp.net mvc 3 MVC3 WebGrid页面/排序问题,页面上其他地方有一个复选框,asp.net-mvc-3,checkbox,webgrid,Asp.net Mvc 3,Checkbox,Webgrid,我的页面上有一个复选框,创建如下: @Html.CheckBoxFor(x => x.MyBoolValue) 下面我有一个带有排序和分页的WebGrid,但在执行此操作时,我得到一个System.InvalidOperationException: The parameter conversion from type 'System.String' to type 'System.Boolean' failed. See the inner exception for more

我的页面上有一个复选框,创建如下:

@Html.CheckBoxFor(x => x.MyBoolValue)   
下面我有一个带有排序和分页的WebGrid,但在执行此操作时,我得到一个System.InvalidOperationException:

The parameter conversion from type 'System.String' to type 'System.Boolean' failed. See the inner exception for more information.
内部例外是:

{"true,false is not a valid value for Boolean."}

我知道这是由于复选框和底层隐藏值的绑定。在一个页面上,我使用查询字符串值上的Contains(“true”)来处理这个问题,但是当WebGrid被刷新时,我怎么做呢

MVC在
@Html.CheckBoxFor(x=>x.MyBoolValue)
上创建两个输入。一个复选框和一个值为
false
的隐藏字段

他(MVC;))这样做可以确保,即使不选中复选框,变量也存在。 因此,如果您选中该框,则变量值为
true、false
false
(如果不是)

这样做:

<input type="CheckBox" name="MyBoolValue" value="@Model.MyBoolValue"/>

或者创建一个处理该问题的自定义模型绑定器


我发现从ModelState中删除值可以解决这个问题,而且似乎不会引起任何副作用-如果我遗漏了什么,也许有人可以指出

在我的控制器中,我只添加

ModelState.Remove("MyBoolValue");
也就是说

@Html.CheckBoxFor(x => x.MyBoolValue)   

除非我弄错了,否则会退回到使用模型值吗?

如果您想维护所有标准验证器或活页夹功能,隐藏字段会以某种方式困扰您。您可以使用以下选项:

<input type="CheckBox"@(Model.BoolProperty ? " checked=\"checked\"" : string.Empty) name="BoolProperty" value="true"/>

问题在于操作参数的名称:

public ActionResult Product(ProductModel model); 
例如,以下内容将解决您的问题:

public ActionResult Product(ProductModel request); 

太好了,我知道这很简单。我搜索了Google,但是在WebGrid中有那么多关于复选框列的点击,这对我的问题没有多大用处。谢谢.Bggr,我刚刚在WebGrid上设置了ajaxUpdateContainerId属性,这会导致相同的问题,即使是使用Html.CheckBox()。。。有什么想法吗?是的,使用普通的html输入,我改变了答案。希望这有帮助谢谢你的帮助。我最近一直在研究这个问题,并取得了一些其他的发现。如果有帮助的话,我已经在这里记录了它-这对我不起作用,复选框没有正确绑定到模型,并且在回发时,选中复选框不会在属性中返回true。看看这篇文章:是否愿意提供详细信息,说明为什么它会解决此问题?