这是我昨天发布的问题的后续行动。我能够正确实现复选框,感谢您的所有建议。现在我正在尝试解决第二个问题,即在页面刷新期间或用户单击浏览器上的后退按钮时保持复选框状态。我再次在视图中有以下示例代码:
<tr>
<td><label for="Name">Name</label></td>
<td><%= Html.Encode(entity.CONTACT_NAME)%></td>
<td><%= Html.CheckBox("Name", false, new {@value = Html.Encode(entity.CONTACT_NAME)}) %></td>
</tr>
当我选中该框时,我在ModelState“John Doe,false”中获得Name键的以下值。根据我的理解,复选框html帮助器从ModelState获取其值。但是当页面重新呈现并进入此特定代码行时,我收到以下错误:
The parameter conversion from type 'System.String' to type 'System.Boolean' failed
同样,我的目标是简单地维护复选框状态,不知道这里发生了什么。
更新:
如果复选框在重新渲染时从ModelState获取值,并且如果将键存储为字符串,我该如何将它们转换为布尔值?
答案 0 :(得分:1)
您是否尝试将复选框的值设置为实体的联系人姓名,我猜这是一个字符串?
您需要将值设置为实体的布尔属性。
答案 1 :(得分:0)
确保用于设置复选框值的属性或表达式是布尔类型。
答案 2 :(得分:0)
能够解决它,感谢你的所有建议。在我的例子中,我必须将ModelState作为参数传递给方法,该方法查看ModelState中不仅仅是false的所有值,并通过调用SetModelValue将它们设置为true。
示例:
errorHandler(ModelStateDictionary modelState, ChangeRequest aChangeRequest)
{
if (aChangeRequest.Job != "false")
modelState.SetModelValue("Job", new ValueProviderResult("true", "true", new CultureInfo("en-US")));
//Etc.
}
对于这个项目,我创建了一个类对象,在我的控制器中使用TryUpdateModel填充值,然后将其传递给方法。我确信有一种更有效的方式,但这似乎有效,任何其他建议都是受欢迎的。