Как добавить пользовательские хуки в контроллеры в ASP.NET MVC2 - PullRequest
1 голос
/ 28 мая 2010

Я только что начал новый проект в ASP.net 4.0 с MVC 2.

Что мне нужно сделать, так это настроить пользовательский хук в начале и в конце каждого действия контроллера.

например.

public void Index() {  
    *** call to the start custom hook to externalfile.cs (is empty so does nothing)

    ViewData["welcomeMessage"] = "Hello World";

    *** call to the end custom hook to externalfile.cs (changes "Hello World!" to "Hi World")

    return View();
}

После этого вид будет видеть welcomeMessage как "Hi World" после изменения в пользовательском хуке.

Пользовательский хук должен находиться во внешнем файле и не изменять скомпилированный код «core». Это вызывает проблему, так как с моим ограниченным знанием ASP.net MVC должен быть скомпилирован.

У кого-нибудь есть советы, как этого можно достичь?

Спасибо

Ответы [ 3 ]

3 голосов
/ 28 мая 2010

Вы создаете свой собственный класс на основе ActionFilterAttribute . Имеет следующие крючки.

  1. OnActionExecuted
  2. OnActionExecuting
  3. OnResultExecuted
  4. OnResultExecuting

Например,

public class MyFilterAttribute : ActionFilterAttribute
{
    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        var controller = filterContext.Controller;

        controller.ViewData["welcomeMessage"] = "Hi World!";
        controller.TempData["Access_My_TempData"] = "Some Value";

        base.OnActionExecuted(filterContext);
    }
}

Вы также можете проверить, какой тип [Действие] выполняет метод Действие.

if ((filterContext.Result is RedirectResult) || (filterContext.Result is RedirectToRouteResult))
{
    // do something only if we are redirecting to a different action
}
else if (filterContext.Result is ViewResult)
{
    // this is just a normal View action
}

О, я забыл показать, как использовать атрибут.
Вы просто украшаете свой метод действия.

[MyFilterAttribute]
public ActionResult MyActionMethod()
{
    return View();
}
1 голос
/ 28 мая 2010

Система плагинов, основанная на событиях, где вы можете динамически вызывать код скрипта. Таким образом, создавая (например) скрипты на железном питоне, которые вызываются при возникновении событий контроллером.

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

0 голосов
/ 28 мая 2010

Как насчет переопределения OnActionExecuting / OnActionExecuted и использования MEF (импорт, экспорт другого кода сборки)?

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