MVC3 WebGrid页面/排序问题与一个复选框在页面的其他地方



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

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

下面我有一个WebGrid排序和分页,但在这样做我得到一个系统。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."}

我知道这是由于CheckBox和底层隐藏值的绑定。在页面GET上,我使用Contains("true")处理查询字符串值,但是当WebGrid刷新时,我该如何做到这一点?

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

He (MVC;))这样做确保,即使你不选中复选框,变量也存在。因此,如果您勾选该框,则变量值为true,false,否则为false

这样做:

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

或者创建一个定制的模型绑定器来处理它。

ASP。. MVC自定义模型绑定

如果您想要维护所有标准的验证器或绑定器功能,那么隐藏字段会给您带来麻烦。你可以这样写:

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

我发现从ModelState中删除这个值解决了这个问题,并且似乎没有引起任何副作用—如果我错过了什么,也许有人可以指出来?

在控制器中添加

ModelState.Remove("MyBoolValue");

这意味着

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

将退回到使用模型值,除非我错了?

问题是操作参数的名称:

public ActionResult Product(ProductModel model); 

例如,以下命令将解决您的问题:

public ActionResult Product(ProductModel request); 

相关内容

最新更新