MvcContrib CheckBoxList

时间:2010-05-10 05:52:25

标签: mvccontrib checkboxlist

可能有人可以解释这种行为:

我正在使用最新版MvcContrib的CheckBoxList 当我的页面第一次加载时 - 我只是返回我的视图

return View(Product.GetProduct(productId)); 

一切似乎都很好。 所有html简单控件都已成功填充,包括checkboxlist:

<%= this.CheckBoxList(model => model.Product.Statuses)
    .Options(Model.Statuses, model => model.Id, model => model.Name)
    .ItemFormat("{0}<br />")
%>

所以,我在这个表单上有几个按钮,例如按钮“搜索”()。我可以通过productId进行搜索,并在找到任何内容时显示它。 所以我将productId传递给我的控制器,这个控制器以与第一次相同的方式返回视图:

return View(Product.GetProduct(productId))

顺便说一句,我使用相同的逻辑 - 完全相同:相同的视图,相同的控制器,相同的动作......没什么新的。但在这种情况下,我收到了此错误消息:

  

字符串未被识别为有效的布尔值。   描述:执行当前Web请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

     

异常详细信息:System.FormatException:String未被识别为有效的布尔值。

来源错误:

Line 268:                              <labe**strong text**l for="group<%=item.Value%>"><%=item.Text%></label><br />
Line 269:                          <% } %>--%>
Line 270:                          <%= this.CheckBoxList(model => model.Product.Statuses).Options(Model.Statuses, model => model.Id, model => model.Name).ItemFormat("{0}<br />")%>
Line 271:                        </div>
Line 272:                        </div>   

我发现,当第一次和之后加载视图时,如果未选中所有复选框,我点击搜索 - 一切顺利,但是当选中任何复选框时,我点击搜索 - 我收到此错误。

我需要帮助。有什么好主意吗?

1 个答案:

答案 0 :(得分:2)

我相信CheckBoxList中存在一个错误,因此当它验证列表时,它需要复选框的值为布尔可转换字符串(“false”,“true”)。

因此,在您的示例中,如果您更改model =&gt; model.id to model =&gt; “是的”你看到你不会得到错误:

 <%= this.CheckBoxList(model => model.Product.Statuses).Options(Model.Statuses, model => "true", model => model.Name).ItemFormat("{0}<br />")%>

但这不是你想要的。我的解决方法是在ModelState无效时从ModelState中删除CheckBoxList的元素(在你的案例中是model.Product.Statuses)。

您需要在ModelState中找到model.Product.Statuses的相应键并将其删除。我正在使用以下代码片段。您需要更改模型和属性。

if (!ModelState.IsValid)
{    
  ModelState.Remove(PropertyHelper<EmailModel>.GetProperty(x => x.Attachments).Name);
  ...

我正在使用PropertyHelper表单How to get the PropertyInfo of a specific property?

另外,我在mvccontrib问题跟踪器中配置了这个相关链接: http://mvccontrib.codeplex.com/workitem/7071

相关问题