3

Je ne comprends pas certaines notions de base sur les modèles MVC et j'espère obtenir des éclaircissements utiles.MVC Model Instantiation

Dans mon MVC 4 application web, j'ai un modèle de vue qui construit un IEnumerable <SelectListItem> pour un DropDownList, et si je le fais à mon avis:

@model MyApp.Models.MyModel 

@Html.DropDownListFor(x => x.MyThingID, Model.MySelectList, "Select...") 

je reçois une « référence d'objet non mettre à une instance d'un objet "erreur.

Mais si je fais ceci:

@model MyApp.Models.MyModel 

@{ var myModel = new MyApp.Models.MyModel(); } 
@Html.DropDownListFor(x => x.MyThingID, myModel.MySelectList, "Select...") 

Il fonctionne. Mais cette instanciation explicite me semble terriblement mauvaise, et je ne suis pas sûr si je devrais faire quoi que ce soit dans le contrôleur, qui à ce stade est juste un "bare-bones" return View() "ActionResult.

Je ne trouve pas beaucoup de bons conseils et finalement j'essaie d'implémenter quelques menus déroulants en cascade, donc j'ai besoin de mieux comprendre comment cela fonctionne. Si vous avez le temps et l'envie d'aider, j'apprécierais grandement.

Répondre

2

Vous devez transmettre le modèle à la vue. Vous pouvez le faire dans le code du contrôleur:

return View(myModel); 

au lieu de

return View(); // without the model! 

où yourmodel est typeof MyApp.Models.MyModel. Juste initez-le et passez le.

public ActionResult YourAction() 
{ 
    var myModel = new MyApp.Models.MyModel(); 
    // do other actions or put more data inside myModel 
    return View(myModel); 
} 
+0

Bien sûr, cela a beaucoup plus de sens. Je vous remercie! – theog