J'ai une vue unique qui a un menu sur le côté gauche et un conteneur sur le côté droit qui est rendu à partir de l'une de plusieurs vues partielles.Comment puis-je mieux gérer cette situation dans ASP.NET MVC concernant mes vues partielles?
En ce moment je suis en cours d'exécution dans une situation comme celle-ci vue "Index":
<div class="container">
<div class="leftHandMenu">
// various dynamic menu items
</div>
<div class="rightHandPane">
<% if (Model.CurrentPane == "Sent") { %>
<% Html.RenderPartialView("SentPartial", Model.SomeData); %>
<% } else if (Model.CurrentPane == "Inbox") { %>
<% Html.RenderPartialView("InboxPartial", Model.SomeData); %>
<% } else if (Model.CurrentPane == "Alerts") { %>
<% Html.RenderPartialView("AlertsPartial", Model.SomeData); %>
<% } %>
</div>
// various other common view items
</div>
les actions suivantes:
public ActionResult Inbox(int? page)
{
MessageListViewModel viewData = new MessageListViewModel();
viewData.SomeData = messageService.getInboxMessages(page.HasValue ? page.Value : 0);
viewData.CurrentPane = "Inbox";
return View("Index", viewData);
}
public ActionResult Alerts(int? page)
{
MessageListViewModel viewData = new MessageListViewModel();
viewData.SomeData = messageService.getAlertMessages(page.HasValue ? page.Value : 0);
viewData.CurrentPane = "Alerts";
return View("Index", viewData);
}
public ActionResult Sent(int? page)
{
MessageListViewModel viewData = new MessageListViewModel();
viewData.SomeData = messageService.getSentMessages(page.HasValue ? page.Value : 0);
viewData.CurrentPane = "Sent";
return View("Index", viewData);
}
Je me rends compte de cette situation est pas idéale, mais J'ai besoin que ces portions restent des vues partielles. Je fais un tas d'appels ajax sur cette vue pour recharger ce "rightHandPane" avec les différentes vues partielles.
J'ai une seule vue "Index", puis ces différentes vues partielles qui chargent un volet particulier de "Index". Je passe le nom de la vue dans le ViewModel, puis je charge ces instructions if-else dans la vue partielle appropriée.
Comment pourrais-je faire cela? Je suis sur le point d'ajouter 3 vues partielles et cela commence à être pénible. Je préférerais ne pas avoir besoin de maintenir mon currentPane dans mon ViewModel.
Y at-il quelque chose que je peux faire pour éviter cette situation tous ensemble? J'ai envisagé d'utiliser une vue principale pour les parties communes, mais j'ai besoin d'une vue maître fortement typée, ce qui n'est pas si simple dans ASP.NET MVC.
Merci!
Eh bien, certains des bits communs sont dynamiques. J'aurais besoin d'une vue maître fortement typée. Je ne peux pas faire cela sans créer un contrôleur de base, non? – KingNestor
La page maître peut avoir plusieurs espaces réservés de contenu différents dans lesquels vous pouvez placer votre contenu spécifique à la zone. .... Je vais ajouter à ma réponse. – Mark
Le motif est connu sous le nom de composition de vue et constitue la manière correcte de résoudre ce problème. Factoriser les choses communes dans une mise en page et composer la vue à partir des partiels nécessaires en utilisant la mise en page pour définir la structure. – Neal