ASP.NET вызывать метод контроллера с главной страницы? - PullRequest
2 голосов
/ 19 февраля 2011

В 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);
}

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

Ответы [ 2 ]

3 голосов
/ 19 февраля 2011

Вы можете использовать помощники 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);
}
1 голос
/ 19 февраля 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);
  }
}

Действие Меню захватывает модель меню и возвращает частичное представление только с помощью меню.

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

В вашем представлении Index.aspx вы теперь можете вызвать действие «Меню» для отображения меню:

<%@ 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/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...