搞这个太久了!关于以下问题的任何建议...
添加的代码:
模型:AccountModels.cs
[Required]
[Display(Name = "Select role: ")]
public String Role { get; set; }
控制器:AccountController.cs
// GET: /Account/Register
public ActionResult Register()
{
List<SelectListItem> list = new List<SelectListItem>();
SelectListItem item;
foreach (String role in Roles.GetAllRoles())
{
item = new SelectListItem { Text = role, Value = role };
list.Add(item);
}
ViewBag.roleList = (IEnumerable<SelectListItem>)list;
return View();
}
也在 [HTTpPost]
if (createStatus == MembershipCreateStatus.Success)
{
Roles.AddUserToRole(model.UserName, model.Role);
MailClient.SendWelcome(model.Email);
FormsAuthentication.SetAuthCookie(model.UserName, false /* createPersistentCookie */);
return RedirectToAction("Create", "Customers");
}
查看:Register.cshtml
<div class="editor-label">
@Html.LabelFor(m => m.Role)
</div>
<div class="editor-field">
@Html.DropDownListFor(m => m.Role, ViewBag.roleList as IEnumerable<SelectListItem>)
该代码有效并允许用户选择一个角色,但如果用户在创建新帐户时违反验证规则,该代码就会崩溃。
示例:如果密码不正常匹配,验证将启动,但由于添加了新代码,应用程序就会崩溃。
创建错误的代码:
@Html.DropDownListFor(m => m.Role, ViewBag.roleList as IEnumerable<SelectListItem>)
错误代码
具有键“角色”的 ViewData 项的类型为“System.String”,但必须为“IEnumerable”类型。