Сохраните список объектов и передайте его представлению создания / редактирования при сбое проверки в ASP.NET MVC 2. - PullRequest
0 голосов
/ 08 апреля 2010

Я связываю свойство внешнего ключа в моей модели. Я передаю список возможных значений для этого свойства в моей модели. Модель выглядит примерно так:

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());), но я не хочу добавлять дополнительные издержки на получение списка из БД, когда я уже сделал это ..

Кто-нибудь знает, как это сделать?

1 Ответ

0 голосов
/ 08 апреля 2010

Вы можете сохранить его в TempData.

TempData["UserRoles"] = Model.Roles;

Тем не менее, я склонен избегать хранения данных между запросами. Серьезно спросите себя, сколько стоило бы вернуться к базе данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...