Chcę sprawdzić pewne rzeczy dotyczące stanu sesji, agenta użytkownika itp., A także ewentualnie podjąć działanie i zwrócić specjalny widok, ZANIM metoda kontrolera ma szansę na wykonanie. Na przykład:Jak uzyskać pewien kod do wykonania przed każdą pojedynczą akcję kontrolera w ASP.NET MVC 2?
najpopularniejsze:
Użytkownik żąda Start/index
kontrole systemowe, aby upewnić x = 0.
x nie jest równa zeru, więc kontroler Home/Index wykonuje jak normalne!.
Ale czasami:
Użytkownik żąda Start/index
kontrole systemowe, aby upewnić x = 0.
x CZY równa zeru!. Użytkownik musi zostać powiadomiony, a żądana akcja kontrolera nie może zostać uruchomiona.
Imyślę, że to wymaga użycia ActionFilters. Ale przeczytałem o nich i nie rozumiem, czy mogę wyprzedzić metodę kontrolera i zwrócić widok, zanim zostanie on wykonany. Jestem pewien, że mógłbym wykonać kod przed uruchomieniem metody kontrolera, ale w jaki sposób mogę go wyłączyć w niektórych instancjach i zwrócić niestandardowy widok lub bezpośrednio do innej metody kontrolera?
Aktualizacja: Zaimplementowałem rozwiązanie RM. To, co zrobiłem:
public class MyAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (myValue == wrongValue)
{
filterContext.Result = new ViewResult{ViewName = "Notice"};
}
base.OnActionExecuting(filterContext);
}
}
Teraz, kiedy myValue jest źle, te użytkownikom uzyskać pogląd uprzedzenia i wnioskowana kontroler nie jest wykonywany. Aby to zadziałało, zastosowałem go do bazy kontrolerów, z której wszystkie moje kontrolery dziedziczą.
Hej, chris. Daj mi znać, jak sobie z tym poradziłeś? –