Я связываю свойство внешнего ключа в моей модели. Я передаю список возможных значений для этого свойства в моей модели. Модель выглядит примерно так:
public class UserModel
{
public bool Email { get; set; }
public bool Name { get; set; }
public RoleModel Role { get; set; }
public IList<RoleModel> Roles { get; set; }
}
public class RoleModel
{
public string RoleName
{
get;
set;
}
}
Вот что у меня в контроллере:
public ActionResult Create()
{
IList<RoleModel> roles = RoleModel.FromArray(_userService.GetAllRoles());
UserModel model = new UserModel()
{
Roles = roles
};
return View(model);
}
По моему мнению:
<div class="editor-label">
<%= Html.LabelFor(model => model.Role) %>
</div>
<div class="editor-field">
<%= Html.DropDownListFor(model => model.Role, new SelectList(Model.Roles, "RoleName", "RoleName", Model.Role))%>
<%= Html.ValidationMessageFor(model => model.Role)%>
</div>
Что мне нужно сделать, чтобы вернуть список ролей моему контроллеру, чтобы снова передать его представлению в случае сбоя проверки. Вот что мне нужно:
[HttpPost]
public ActionResult Create(UserModel model)
{
if (ModelState.IsValid)
{
// insert logic here
}
//the validation fails so I pass the model again to the view for user to update data but model.Roles is null :(
return View(model);
}
Как написано в комментариях выше, мне нужно снова передать модель со списком ролей, но model.Roles
- это null
. В настоящее время я снова запрашиваю у службы роли (model.Roles = RoleModel.FromArray(_userService.GetAllRoles());
), но я не хочу добавлять дополнительные издержки на получение списка из БД, когда я уже сделал это ..
Кто-нибудь знает, как это сделать?