2009-05-17 2 views
4

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

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

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

ответ

5

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

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

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

0

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

2

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

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

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

[CustomActionFilter] 
public class HomeController : Controller { 
    ... 
} 
1

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

- Site.Master -

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

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

Пламя;)

Смежные вопросы