ASP.net mvc Общие данные для нижнего колонтитула - PullRequest
4 голосов
/ 17 мая 2009

Итак, у меня есть нижний колонтитул, который будет отображаться на каждой странице моего веб-приложения

Мне нужно, чтобы он отображал динамические данные, так что ... это означает, что каждое действие контроллера должно возвращать viewData, который содержит эти данные ... а также данные, специфичные для действия

Как бы вы, ребята, это реализовали? Может, конструктор базового контроллера?

Ответы [ 5 ]

5 голосов
/ 18 мая 2009

Вы на правильном пути с идеей базового контроллера, но я бы переопределил OnActionExecuted и сгенерировал там данные. Проверьте, будет ли результат результатом ViewResult, прежде чем генерировать общие данные. Нет необходимости генерировать данные, если результатом является перенаправление или данные, возвращающиеся через AJAX.

Вы можете также рассмотреть возможность создания модели только для просмотра для общих данных (если данные обширны) и поместить ее в ViewData в целом. Затем вы можете создать строго типизированное частичное представление, которое берет модель и легче использовать свойства модели в представлении. Отрисовка этого частичного представления с главной страницы позволит легко включить данные на каждой странице и использовать их строго типизированным способом.

Если данные или форматирование нижнего колонтитула не сложны, тогда лучше просто поставить отметку на главной странице.

2 голосов
/ 18 мая 2009

Вы можете создать ActionFilter, который записывает данные в ViewData следующим образом:

public class CustomActionFilter : ActionFilterAttribute
{
    public override void OnResultExecuting(ResultExecutingContext filterContext)
    {
        filterContext.Controller.ViewData["WillNeedThis"] = "Foo";
    }
}

Затем украсьте свои контроллеры и / или действия, которым понадобятся эти данные:

[CustomActionFilter]
public class HomeController : Controller {
   ...
}
1 голос
/ 18 мая 2009

Как насчет использования метода Html.RenderAction () из сборки MVC Futures ?

- Site.master -

  <div id="footer">
        <% Html.RenderAction("SomeAction", "SomeController",
               new { someParam = ViewData["someValue"] }); %>
  </div>

Некоторые могут возразить, что это омрачает воды разделения View и Controller, и я, вероятно, не стал бы делать это в ViewPage, но я считаю его достойной альтернативой в MasterViewPage.

Пламя включено ;)

1 голос
/ 17 мая 2009

Вы можете передать данные на главную страницу и показать там нижний колонтитул:

Передача данных на главную страницу в ASP.NET MVC

0 голосов
/ 17 мая 2009

Если данные не сложные, я использую словарь ViewData для хранения этой информации. Если это так, я помещаю данные нижнего колонтитула в базовый класс для всех моделей, а затем перемещаю нижний колонтитул в ContentPlaceholder. Это немного раздражает, поскольку вы должны размещать его на каждой странице просмотра.

...