利用可能なすべてのユーザーロールのドロップダウンリストを含めるために、ボイラープレートのアカウント登録ビューを変更しようとしました。現在、リストは適切に表示されますが、新しいユーザーを登録しようとすると、モデルの状態は無効になります。ここでなぜHtml.DropDownListForはビューデータ項目を必要としますか?
がモデルの関連部分である:
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);
}
任意の助けいただければ幸いです!
でオブジェクトを再構築する必要がありますか? –
'Roles.GetAllRoles()'がnullまたは空のリストを返さないことを確認できますか? 'null'の場合、' HtmlHelper'は 'ViewData'を参照して' DropDownList'を埋め込みます。 – Joe
@JoeTuskan、ドロップダウンにはすべてのロールが設定されているためnullを返しません。私は問題があると提出するときだけです。 – Scottingham