ASP.NET appeler une méthode de contrôleur à partir de la page maître?

Dans ASP.NET MVC2, comment appeler une méthode de contrôleur à partir de la page maître? Imaginons par exemple que je veuille inclure des données de synthèse dans le maître:

+--------------------------------------+ | Logo Welcome xyz| +--------------------------------------+ | total sales this month $999 | +--------------------------------------+ | Home | Sales | Import | Export (menu)| +--------------------------------------+ 

Et j’ai dans le contrôleur des ventes cette méthode:

 public ActionResult TotalSalesThisMonth() { var totalSalesModel = SalesService.GetTotalSalesThisMonth() return View(totalSalesModel); } 

Comment puis-je appeler cette vue depuis l’intérieur du masque afin qu’elle soit affichée sur chaque page?

Vous pouvez utiliser les aides Html.Action ou Html.RenderAction . Par exemple, vous pouvez placer les éléments suivants quelque part sur votre page maître:

 <%= Html.Action("TotalSalesThisMonth", "SomeController") %> 

Ceci exécutera l’action du contrôleur, rendra la vue et insérera le code HTML généré à l’emplacement spécifié dans la page maître. Vous pouvez également limiter cette action à une utilisation uniquement en tant qu’enfant en la décorant avec l’atsortingbut [ChildActionOnly] :

 [ChildActionOnly] public ActionResult TotalSalesThisMonth() { var totalSalesModel = SalesService.GetTotalSalesThisMonth() return View(totalSalesModel); } 

Et enfin, si à l’intérieur de l’action du contrôleur, vous vouliez vérifier si elle était appelée comme une action normale ou comme une action enfant, vous pouvez le faire:

 public ActionResult TotalSalesThisMonth() { var totalSalesModel = SalesService.GetTotalSalesThisMonth() if (ControllerContext.IsChildAction) { return View("foo", totalSalesModel); } return View("bar", totalSalesModel); } 

Citant de http://haacked.com/archive/2009/11/18/aspnetmvc2-render-action.aspx

J’utiliserai le terme RenderAction pour désigner ces deux méthodes. Voici un aperçu de la manière dont vous pourriez utiliser cette méthode. Supposons que vous ayez le contrôleur suivant.

 public class MyController { public ActionResult Index() { return View(); } [ChildActionOnly] public ActionResult Menu() { var menu = GetMenuFromSomewhere(); return PartialView(menu); } } 

L’action Menu saisit le modèle Menu et renvoie une vue partielle contenant uniquement le menu.

 <%@ Control Inherits="System.Web.Mvc.ViewUserControl" %> 
    <% foreach(var item in Model.MenuItem) { %>
  • <%= item %>
  • <% } %>

Dans votre vue Index.aspx, vous pouvez maintenant appeler l’action Menu pour afficher le menu:

 <%@ Page %>    <%= Html.Action("Menu") %> 

Welcome to the Index View

Le contenu ci-dessus est sous licence CC-BY: http://creativecommons.org/licenses/by/2.5/