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 ?