【发布时间】:2015-05-06 16:59:15
【问题描述】:
我正在尝试扩展使用 EF6 和 MVC 生成的用户注册表单,我希望能够显示显示为单选按钮的用户角色列表,我相信我已经做到了。但是我遇到的麻烦是当我将表单发布回控制器时,它没有将选定的选项绑定回视图模型。我做错了什么?
我的视图模型:
public class RegisterViewModel
{
[Required]
[Display(ResourceType = typeof(ResourceStrings), Name = "Username")]
[StringLength(50, ErrorMessageResourceType = typeof(ResourceStrings), ErrorMessageResourceName = "MinLengthValidation", MinimumLength = 4)]
public string Username { get; set; }
[Required]
[Display(ResourceType = typeof(ResourceStrings), Name = "FirstName")]
[StringLength(50, ErrorMessageResourceType = typeof(ResourceStrings), ErrorMessageResourceName = "MinLengthValidation", MinimumLength = 2)]
public string FirstName { get; set; }
[Required]
[Display(ResourceType = typeof(ResourceStrings), Name = "Surname")]
[StringLength(50, ErrorMessageResourceType = typeof(ResourceStrings), ErrorMessageResourceName = "MinLengthValidation", MinimumLength = 2)]
public string Surname { get; set; }
//Other fields removed to save space
[Required]
[Display(Name = "Roles")]
public IEnumerable<IdentityRole> UserRoles { get; set; }
}
我有一个想要传递给视图的身份角色列表,如下所示:
// GET: /Account/Register
[AllowAnonymous]
public ActionResult Register()
{
var model = new RegisterViewModel();
model.UserRoles = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>()).Roles.ToList();
return View(model);
}
在视图中我显示的角色是这样的:
<div class="panel-body">
@foreach (var item in Model.UserRoles)
{
<div class="col-md-8">
<div>
@Html.RadioButtonFor(m => m.UserRoles, item.Name)
@Html.DisplayFor(m => item.Name, new { @class = "col-md-3 control-label" })
</div>
</div>
}
@Html.ValidationMessageFor(m => m.UserRoles, "", new { @class = "text-danger" })
</div>
但是,当表单被提交回来时,模型永远不会有效,因为角色永远不会被绑定。 (或者至少我是这么认为的)有什么想法吗?
【问题讨论】:
标签: c# asp.net-mvc razor asp.net-identity model-binding