5 votes

Logique de branches dans une vue MVC

Je me retrouve à écrire beaucoup de code dans mes vues qui ressemble au code ci-dessous. Dans ce cas, je veux ajouter un peu de HTML explicatif pour un novice, et un HTML différent pour un utilisateur expert.

<% if (ViewData["novice"] != null ) { %>
quelques codes HTML supplémentaires pour un novice
<% } else { %>
du HTML pour un expert
<% } %>

Il s'agit de logique de présentation, donc il est logique qu'elle se trouve dans une vue plutôt que dans le contrôleur. Cependant, cela devient vite compliqué, surtout lorsque ReSharper veut déplacer toutes les accolades pour le rendre encore plus compliqué (existe-t-il un moyen de le désactiver pour les vues?).

Ma question est de savoir si c'est correct, ou si je devrais diviser dans le contrôleur pour avoir deux vues séparées? Si je crée deux vues, je devrai maintenir beaucoup de codes HTML en double.

Ou devrais-je créer deux vues distinctes avec une vue partielle partagée pour les éléments communs ?

2voto

lomaxx Points 32540

Idéalement, ce genre de logique devrait être géré dans le modèle de vue et la vue devrait simplement rendre le modèle.

Donc, vous pourriez avoir quelque chose comme ça dans votre vue :

<%= ViewData["helptext"]  %>

et votre logique dans le contrôleur serait quelque chose comme :

ViewData["helpText"] = isNovice ? noviceText : expertText;

de cette façon, vous pouvez renvoyer cette logique au contrôleur et maintenir vos vues propres

1voto

Jace Rhea Points 3186

Vous essayez de créer 2 pages HTML totalement séparées avec des modèles identiques. Vous voulez une vue séparée. Ne cherchez pas à dépasser le modèle de conception avec une logique de branchements conditionnels.

Les aides HTML ne vont pas beaucoup vous aider ici, car il semble que vous ne répéterez pas beaucoup de logique à part des conditions if else.

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