Szukaj…


Niestandardowe filtry akcji

Piszemy niestandardowe filtry akcji z różnych powodów. Możemy mieć niestandardowy filtr akcji do rejestrowania lub zapisywania danych w bazie danych przed wykonaniem jakiejkolwiek akcji. Możemy też mieć jeden do pobierania danych z bazy danych i ustawiania jej jako globalnych wartości aplikacji.

Aby utworzyć niestandardowy filtr akcji, musimy wykonać następujące zadania:

  1. Utwórz klasę
  2. Dziedzicz go od klasy ActionFilterAttribute

Zastąp przynajmniej jedną z następujących metod:

OnActionExecuting - ta metoda jest wywoływana przed wykonaniem akcji kontrolera.

OnActionExecuted - ta metoda jest wywoływana po wykonaniu akcji kontrolera.

OnResultExecuting - ta metoda jest wywoływana przed wykonaniem wyniku działania kontrolera.

OnResultExecuted - ta metoda jest wywoływana po wykonaniu wyniku akcji kontrolera.

Filtr można utworzyć, jak pokazano na poniższej liście:

    using System;
    
    using System.Diagnostics;
    
    using System.Web.Mvc;
    
    
    
    namespace WebApplication1
    {
    
        public class MyFirstCustomFilter : ActionFilterAttribute
        {
            public override void OnResultExecuting(ResultExecutingContext filterContext)
            {
                //You may fetch data from database here 
                filterContext.Controller.ViewBag.GreetMesssage = "Hello Foo";
                base.OnResultExecuting(filterContext);
            }
    
            public override void OnActionExecuting(ActionExecutingContext filterContext)
            {
                var controllerName = filterContext.RouteData.Values["controller"];
                var actionName = filterContext.RouteData.Values["action"];
                var message = String.Format("{0} controller:{1} action:{2}", "onactionexecuting", controllerName, actionName);
                Debug.WriteLine(message, "Action Filter Log");
                base.OnActionExecuting(filterContext);
            }
        }
    }


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow