ASP.NET从母版页调用控制器方法?

在ASP.NET MVC2中,如何从母版页调用控制器方法? 比如说我想在主服务器中包含一些概述数据:

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

我在Sales控制器里面有这个方法:

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

如何从主控内部调用该视图,以便它显示在每个页面上?

您可以使用Html.Action或Html.RenderAction帮助程序。 例如,您可以将以下内容放在主页面上:

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

这将执行控制器操作,呈现视图并将生成的HTML插入母版页中的指定位置。 您还可以通过使用[ChildActionOnly]属性进行装饰来限制此操作仅用作子操作:

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

最后,如果在控制器操作中你想测试它是作为正常动作还是作为子动作调用,你可以这样做:

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

引自http://haacked.com/archive/2009/11/18/aspnetmvc2-render-action.aspx

我将使用术语RenderAction来引用这两种方法。 以下是如何使用此方法的快速浏览。 假设您有以下控制器。

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

Menu操作获取Menu模型并返回仅包含菜单的局部视图。

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

在Index.aspx视图中,您现在可以调用Menu操作来显示菜单:

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

Welcome to the Index View

以上内容根据CC-BY许可: http : //creativecommons.org/licenses/by/2.5/