自己在csdn上发了个帖子,这里再备一下,帖子地址:
问题复现步骤:
1.vs2010建立一个mvc3.0的网站项目(含示例代码)
2.编辑注册页面视图(Account/Register),在注册按钮上方,添加以下代码
-
<div class="editor-field">
-
@foreach (SelectListItem item in (List<SelectListItem>)ViewData["CityList"])
-
{
-
@Html.CheckBox("SomeParas", item.Selected, new { value=item.Value})
-
@Html.Label(item.Text);
-
}
-
</div>
3.在Account控制器中,添加
-
protected void BindCheckbox(RegisterModel model)
-
{
-
List<SelectListItem> cityselectList = new List<SelectListItem>();
-
cityselectList.Add(new SelectListItem { Text = "所有", Value = "0", Selected = false });
-
cityselectList.Add(new SelectListItem { Text = "宁波", Value = "88", Selected = false });
-
ViewData["CityList"] = cityselectList;
-
}
4.修改Account中的两个Register方法为
-
public ActionResult Register()
-
{
-
BindCheckbox(null);
-
return View();
-
}
-
-
[HttpPost]
-
public ActionResult Register(RegisterModel model,string[] SomeParas)
-
{
-
//if (ModelState.IsValid)
-
//{
-
// // 尝试注册用户
-
// MembershipCreateStatus createStatus;
-
// Membership.CreateUser(model.UserName, model.Password, model.Email, null, null, true, null, out createStatus);
-
-
// if (createStatus == MembershipCreateStatus.Success)
-
// {
-
// FormsAuthentication.SetAuthCookie(model.UserName, false /* createPersistentCookie */);
-
// return RedirectToAction("Index", "Home");
-
// }
-
// else
-
// {
-
// ModelState.AddModelError("", ErrorCodeToString(createStatus));
-
// }
-
//}
-
ModelState.AddModelError("UserName","sth wrong");
-
BindCheckbox(model);
-
// 如果我们进行到这一步时某个地方出错,则重新显示表单
-
return View(model);
-
}
调试,并尝试进行注册。注册时,选中两个复选框
报错是针对: @Html.CheckBox("SomeParas", item.Selected, new { value=item.Value}) 这句的,错误是:该字符串未被识别为有效的布尔值。
求解惑,为什么会出现这个错误?
可能性1.@Html.CheckBox("SomeParas", item.Selected, new { value=item.Value})
但是首次加载时,并不会有这个问题
只有post提交后,并且注册了ModelStateError后的Return View(model);
才会出现这个问题。
不知道asp.net mvc 在模型绑定验证失败后的 Return View 是否有什么特殊的地方。。
对了,视图是强类型的。
阅读(10418) | 评论(0) | 转发(0) |