ASP.NET вызывает метод контроллера с главной страницы?

Как в ASP.NET MVC2 вызвать метод контроллера с главной страницы? Скажем, например, я хотел включить некоторые обзорные данные в мастер:

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

И у меня внутри контроллера продаж есть этот метод:

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

Как я могу вызвать это представление из мастера, чтобы оно отображалось на каждой странице?


person JK.    schedule 19.02.2011    source источник


Ответы (2)


Вы можете использовать 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);
}
person Darin Dimitrov    schedule 19.02.2011
comment
Ага, я не знал, что вы можете использовать Html.Action внутри мастера, спасибо :) - person JK.; 19.02.2011
comment
@JK, вы можете использовать его в любом представлении, включая главную страницу. - person Darin Dimitrov; 19.02.2011

Цитата из 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/

person Yoko Zunna    schedule 19.02.2011