0 votes

Conserver une liste d'objets et la transmettre à la vue create/edit lorsque la validation échoue en ASP.NET MVC 2

Je lie une propriété de clé étrangère dans mon modèle. Je passe une liste de valeurs possibles pour cette propriété dans mon modèle. Le modèle ressemble à quelque chose comme ceci :

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;
    }
}

C'est ce que j'ai dans le contrôleur :

public ActionResult Create()
{
    IList<RoleModel> roles = RoleModel.FromArray(_userService.GetAllRoles());
    UserModel model = new UserModel()
                      {
                          Roles = roles
                      };
    return View(model);
}

Dans la vue que j'ai :

<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>

Que dois-je faire pour récupérer la liste des rôles dans mon contrôleur afin de la transmettre à nouveau à la vue lorsque la validation échoue. Voici ce dont j'ai besoin :

[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);
}

Comme écrit dans les commentaires ci-dessus, je dois repasser le modèle avec la liste des rôles à ma vue mais model.Roles est null . Actuellement je redemande au service les rôles ( model.Roles = RoleModel.FromArray(_userService.GetAllRoles()); ) mais je ne veux pas ajouter une charge supplémentaire pour obtenir la liste de la base de données alors que je l'ai déjà fait .

Quelqu'un sait comment le faire ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X