Как я могу сделать функцию для запуска на всех контроллерах в ASP.NET MVC 2? - PullRequest
0 голосов
/ 18 февраля 2011

У меня есть функция, которая:

  • получает некоторую информацию от модели (сделано)
  • получает некоторую информацию из cookie (готово), а
  • установить новую информацию о ViewData (на представлениях) на каждом контроллере

Кроме того, функция должна запускаться на каждом контроллере во время вызова контроллера (я не знаю, как это сделать).

Я написал эту функцию на BaseController, но получаю ошибку:

Ссылка на объект не установлена ​​для экземпляра объекта.

И я думаю, что это не правильный путь. Я использую ASP.NET MVC 2 и .NET 3.5.

Спасибо за помощь.

Ответы [ 2 ]

8 голосов
/ 18 февраля 2011

Создать фильтр пользовательских действий :

public class MyActionFilter : ActionFilterAttribute
{
    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        // if the ActionResult is not a ViewResult (e.g JsonResult, ContentResult),
        // there is no ViewData so don't do anything.
        var viewResult = filterContext.Result as ViewResult;

        if (viewResult != null)
        {
           // call your function, do whatever you want to the result, e.g:
           viewResult.ViewData["someKey"] = someData;
        }
    }
}

Брось этого плохого парня на свой базовый контроллер:

[MyActionFilter]
public class BaseController : Controller
{

}

Теперь, после выполнения каждого ActionResult для каждого контроллера будет выполняться логика фильтра действий.

У вас есть несколько других событий, к которым вы можете подключиться, но звучит так, будто вы хотите что-то сделать после действие было выполнено, поэтому я думаю, что вышеприведенное должно вас устраивать.

0 голосов
/ 18 февраля 2011

Это не поможет вам, пока вы не обновитесь, но в ASP.NET MVC 3 вы можете использовать глобальный фильтр действий для этой цели.

http://weblogs.asp.net/gunnarpeipman/archive/2010/08/15/asp-net-mvc-3-global-action-filters.aspx

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