簡體   English   中英

ASP.NET從母版頁調用控制器方法?

[英]ASP.NET call a controller method from the master page?

在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<Menu>" %>
<ul>
<% foreach(var item in Model.MenuItem) { %>
  <li><%= item %></li>
<% } %>
</ul>

現在,在Index.aspx視圖中,可以調用Menu操作來顯示菜單:

<%@ Page %>
<html>
<head><title></title></head>
<body>
  <%= Html.Action("Menu") %>
  <h1>Welcome to the Index View</h1>
</body>
</html>

以上內容均根據CC-BY許可: http//creativecommons.org/licenses/by/2.5/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM