【问题标题】:MVC3 WebGrid Page/Sort Issue with a CheckBox elsewhere on the pageMVC3 WebGrid 页面/排序问题与页面上其他地方的复选框
【发布时间】:2011-12-31 03:53:12
【问题描述】:

我的页面上有一个复选框,是这样创建的:

@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."}

我知道这是由于 CheckBox 和底层 Hidden 值的绑定。在 GET 页面上,我在查询字符串值上使用 Contains("true") 来处理这个问题,但是在刷新 WebGrid 时如何执行此操作?

【问题讨论】:

标签: asp.net-mvc-3 checkbox webgrid


【解决方案1】:

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

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

这样做:

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

或创建一个自定义模型绑定器来处理它。

ASP.NET MVC Custom Model Binding

【讨论】:

  • 太好了,我知道这很简单。我搜索了谷歌,但在 WebGrid 中对复选框列有很多点击 - 对我的问题没有多大用处。谢谢。
  • Bggr,我刚刚在 WebGrid 上设置了 ajaxUpdateContainerId 属性,这会导致同样的问题,即使使用 Html.CheckBox()... 有什么想法吗?
  • 是的,为此使用普通的 html 输入,我改变了我的答案。希望这会有所帮助
  • 感谢您的帮助。我最近一直在研究这个问题,并做了一些其他的发现。如果有帮助,我已经在这里记录了 - websitesorcery.com/post/2012/03/19/…
  • 这对我不起作用,复选框未正确绑定到模型,并且在回发时检查该复选框不会在属性中返回 true。
【解决方案2】:

我发现从 ModelState 中删除值可以解决这个问题,并且似乎不会造成任何副作用 - 也许有人可以指出我是否遗漏了什么?

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

ModelState.Remove("MyBoolValue");

这意味着

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

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

      问题是你的动作参数的名称:

      public ActionResult Product(ProductModel model); 
      

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

      public ActionResult Product(ProductModel request); 
      

      【讨论】:

      • 请详细说明为什么它会解决问题?
      猜你喜欢
      • 1970-01-01
      • 2013-05-09
      • 2019-09-09
      • 1970-01-01
      • 2012-05-05
      • 2014-11-22
      • 2018-08-01
      • 1970-01-01
      • 2012-04-30
      相关资源
      最近更新 更多