Chinaunix首页 | 论坛 | 博客
  • 博客访问: 532261
  • 博文数量: 39
  • 博客积分: 1046
  • 博客等级: 准尉
  • 技术积分: 895
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-10 16:50
文章分类

全部博文(39)

文章存档

2013年(8)

2012年(31)

分类: Web开发

2013-04-02 16:32:10

自己在csdn上发了个帖子,这里再备一下,帖子地址:

问题复现步骤:
1.vs2010建立一个mvc3.0的网站项目(含示例代码)
2.编辑注册页面视图(Account/Register),在注册按钮上方,添加以下代码

点击(此处)折叠或打开

  1.            <div class="editor-field">
  2.             @foreach (SelectListItem item in (List<SelectListItem>)ViewData["CityList"])
  3.             {
  4.              @Html.CheckBox("SomeParas", item.Selected, new { value=item.Value})
  5.              @Html.Label(item.Text);
  6.             }
  7.             </div>
3.在Account控制器中,添加

点击(此处)折叠或打开

  1.         protected void BindCheckbox(RegisterModel model)
  2.         {
  3.             List<SelectListItem> cityselectList = new List<SelectListItem>();
  4.             cityselectList.Add(new SelectListItem { Text = "所有", Value = "0", Selected = false });
  5.             cityselectList.Add(new SelectListItem { Text = "宁波", Value = "88", Selected = false });
  6.             ViewData["CityList"] = cityselectList;
  7.         }
4.修改Account中的两个Register方法为

点击(此处)折叠或打开

  1.         public ActionResult Register()
  2.         {
  3.             BindCheckbox(null);
  4.             return View();
  5.         }
  6.         
  7.         [HttpPost]
  8.         public ActionResult Register(RegisterModel model,string[] SomeParas)
  9.         {
  10.             //if (ModelState.IsValid)
  11.             //{
  12.             // // 尝试注册用户
  13.             // MembershipCreateStatus createStatus;
  14.             // Membership.CreateUser(model.UserName, model.Password, model.Email, null, null, true, null, out createStatus);
  15.  
  16.             // if (createStatus == MembershipCreateStatus.Success)
  17.             // {
  18.             // FormsAuthentication.SetAuthCookie(model.UserName, false /* createPersistentCookie */);
  19.             // return RedirectToAction("Index", "Home");
  20.             // }
  21.             // else
  22.             // {
  23.             // ModelState.AddModelError("", ErrorCodeToString(createStatus));
  24.             // }
  25.             //}
  26.             ModelState.AddModelError("UserName","sth wrong");
  27.             BindCheckbox(model);
  28.             // 如果我们进行到这一步时某个地方出错,则重新显示表单
  29.             return View(model);
  30.         }
调试,并尝试进行注册。注册时,选中两个复选框 
报错是针对: @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 是否有什么特殊的地方。。


对了,视图是强类型的。

阅读(10411) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~