Я попытался изменить представление реестра стандартной учетной записи, чтобы включить раскрывающийся список всех доступных ролей пользователя.В настоящее время список будет отображаться правильно, но когда я пытаюсь зарегистрировать нового пользователя, состояние модели недействительно.
Вот соответствующая часть модели:
public class RegisterModel
{
[Required]
[Display(Name = "User name")]
public string UserName { get; set; }
[Display(Name = "Role")]
public SelectListItem Role { get; set; }
[Required]
[Display(Name = "Roles")]
public List<SelectListItem> Roles { get; set; }
[Required]
[DataType(DataType.EmailAddress)]
[Display(Name = "Email address")]
public string Email { get; set; }
...
Вот соответствующая часть контроллера:
[HttpGet]
public ActionResult Register()
{
RegisterModel initmodel = new RegisterModel();
initmodel.Roles = new List<SelectListItem>();
foreach (string role in Roles.GetAllRoles())
{
SelectListItem item = new SelectListItem();
item.Text = role;
item.Value = role;
initmodel.Roles.Add(item);
}
return View(initmodel);
}
// POST: /Account/Register
[Authorize(Roles = "TelesageAdmin")]
[HttpPost]
public ActionResult Register(RegisterModel model)
{
SQWDataContext db = new SQWDataContext();
model.Roles = new List<SelectListItem>();
foreach (string role in Roles.GetAllRoles())
{
SelectListItem item = new SelectListItem();
item.Text = role;
item.Value = role;
model.Roles.Add(item);
}
if (ModelState.IsValid)
{
// Attempt to register the user
MembershipCreateStatus createStatus;
Membership.CreateUser(model.UserName, model.Password, model.Email, "question", "answer", true, null, out createStatus);
if (createStatus == MembershipCreateStatus.Success)
{
Roles.AddUserToRole(model.UserName, model.Role.Text);
FormsAuthentication.SetAuthCookie(model.UserName, false /* createPersistentCookie */);
UserProfile newuser = new UserProfile();
newuser.UserName = model.UserName;
newuser.canEdit = true;
newuser.Role = model.Role.Text;
db.UserProfiles.InsertOnSubmit(newuser);
return RedirectToAction("Index", "Home");
}
else
{
ModelState.AddModelError("", ErrorCodeToString(createStatus));
}
}
// If we got this far, something failed, redisplay form
return View(model);
}
Любая помощь будет принята с благодарностью!