Я использую MVC3 с бритвой, и я хочу сделать регистрационную форму, где я могу выбрать роль с выпадающим списком .Регистрационная форма с ролями MVC3, Ошибка: элемент ViewData имеет тип «system.sting» должен быть «IEnumerable <selectlistitem>
я получаю роли в списке и все это, но когда я нажимаю отправить я получаю:.
ViewData
элемента, который имеет ключ «роль» типа System.String
но должна быть типа IEnumerable<SelectListItem>
Мой код
Модель:
[Required]
[Display(Name = "Select role: ")]
public String Role { get; set; }
Мой контроллер:
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]
public ActionResult Register(RegisterModel model)
{
if (ModelState.IsValid)
{
// Attempt to register the user
MembershipCreateStatus createStatus;
Membership.CreateUser(model.UserName, model.Password, model.Email, null, null, true, null, out createStatus);
if (createStatus == MembershipCreateStatus.Success)
{
Roles.AddUserToRole(model.UserName, model.Role);
return RedirectToAction("Index", "Home");
}
else
{
ModelState.AddModelError("", ErrorCodeToString(createStatus));
}
}
// If we got this far, something failed, redisplay form
return View(model);
}
Мое мнение:
<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.ValidationMessageFor(m => m.Role)
</div>
Когда я использовать отладчик, чтобы проверить мой код, в контроллере, когда я смотрю на модель параметров и на model.Role
Я вижу правую строку. Кто-нибудь знает какое-либо решение моей проблемы?
Я только что попробовал этот код (с некоторыми изменениями, чтобы заменить процедуру GetAllRoles, добавить кнопку отправки в форму и удалить строки членства из сообщения), и она отлично работала. В конце вы говорите, что это работает в режиме отладки, но не когда вы запускаете его в выпуске? – Dangerous
Нет, он не работает в режиме отладки, но модель получает правильную строку для него, но когда я делаю model.Role, я получаю сообщение об ошибке. – TobiasW
Итак, вы говорите, что вы можете запустить код, и он отобразит выпадающее поле в окне реестра? Из того, что я собираю, вы можете выбрать значение в раскрывающемся списке, нажмите «Отправить» и перерыв в начале вашего действия по почте. Вы можете видеть, что модель содержит выбранное значение? Итак, если вы продолжаете выполнять код после этого разрыва, возникает ошибка? Это верно? – Dangerous