2 votes

Propriétés du modèle MVC

Ma question ultime est la suivante : un modèle de classeur doit-il remplir todos du modèle, ou seulement les parties qui sont affichées, laissant le contrôleur remplir le reste ?

Par exemple, je suis en train d'ajouter un produit dans mon système et sur le formulaire, je veux que l'utilisateur sélectionne les sites sur lesquels le nouveau produit apparaîtra. Par conséquent, dans mon modèle, je veux remplir une collection appelée "AllAvailableSites" pour rendre les cases à cocher parmi lesquelles l'utilisateur peut choisir. J'ai également besoin de remplir le modèle avec tous les sites choisis sur un post au cas où le formulaire ne serait pas validé, et j'ai besoin de représenter le formulaire montrant les sélections initiales. Il semblerait que je doive laisser le classeur de modèles définir les sites choisis sur le modèle et (une fois dans la méthode du contrôleur) définir "AllAvailableSites" sur le modèle. Est-ce que cela semble correct ? Il semble plus efficace de tout définir dans le classeur de modèles, mais quelqu'un suggère que ce n'est pas tout à fait correct.

Je suis reconnaissant pour tout conseil ; je dois dire que toute l'aide en ligne sur les liaisons de modèles MVC semble citer des exemples très simples, rien de compliqué.

Par ailleurs, ai-je vraiment besoin d'une version GET et POST d'une méthode ? Ne peuvent-elles pas simplement prendre le même modèle de vue ? Ensuite, je vérifie dans mon classeur de modèles s'il s'agit d'un GET/POST, et je remplis tous les modèles en conséquence.

0voto

HackedByChinese Points 18294

Votre conclusion initiale est judicieuse. Un liant de modèle ne doit se préoccuper que de la création d'une instance d'un modèle et du remplissage de ses propriétés avec les valeurs dont il dispose dans le contexte de l'action (par exemple, les valeurs des messages), puis de la validation. Votre contrôleur est ensuite responsable du remplissage de toute valeur supplémentaire requise pour la vue, telle que la liste des sites disponibles.

Je ne suis pas tout à fait sûr de ce que vous voulez dire par la nécessité de disposer de méthodes GET/POST distinctes. Si vous sauvegardez ou créez une instance d'un modèle, vous devriez l'afficher, il semblerait donc que la partie GET ne soit pas pertinente. À moins que vous ne vouliez dire quelque chose comme :

[HttpGet, ActionName("Edit")]
public ActionResult Edit(MyModel model)
{
   return View(model);
}

[HttpPost, ActionName("Edit")]
public ActionResult SaveEdit(MyModel model)
{
   // validate and save, then
   return View(model);
}

Vous vous demandez peut-être si vous pouvez les combiner en une seule action et déterminer s'ils consultent le formulaire de modification ou s'ils affichent les résultats du formulaire de modification dans l'action. Je vous encourage vivement à ne pas faire cela. Les raisons en sont multiples, mais restons-en là : ne le faites pas.

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