2014-01-08 3 views
-1

Существует только один элемент управления Дом с кучей действия. Он также имеет частный метод bool IsFinish(), который возвращает состояние системы. На определенном этапе (а именно, когда IsFinish начинает возвращаться true) необходимо, какой любой вызываемый метод перенаправляется на public ActionResult Result(). В принципе, мне все равно, где это будет результат - в текущем контроллере или в другом. Просмотрите все действия, направленные на него.Перенаправление для всех контроллеров действий

Как это можно реализовать?

ответ

4

Чтобы сделать это, вы можете использовать action filter asp.net mvc. Действие фильтра является атрибутом, который вы можете применить к controlleraction - или весь controller - что изменяет способ, в котором выполняется действие, для образца:

public class RedirectFilterAttribute : ActionFilterAttribute 
{ 
     public override void OnActionExecuting(ActionExecutingContext filterContext) 
     { 
      // get the home controller in a safe cast 
      var homeController = filterContext.Controller as Controller; 

      // check if it is home controller and not Result action 
      if (homeController != null && filterContext.ActionDescriptor.ActionName != "Result") 
      { 
       if (homeController.IsFinish()) 
       { 
        filterContext.Result = new RedirectToRouteResult(
         new RouteValueDictionary 
         { 
          { "controller", "Home" }, 
          { "action", "Result" } 
         }); 
       } 
      } 

      base.OnActionExecuting(filterContext); 
     } 
} 

и применить его на контроллере:

[RedirectFilter] // apply to all actions 
public class HomeController : Controller 
{ 

    public ActionResult Home() 
    { 
     /* your action's code */ 
    } 

    public ActionResult Home() 
    { 
     /* your action's code */ 
    } 

    public ActionResult Home() 
    { 
     /* your action's code */ 
    } 

    public ActionResult Result() 
    {   
     return View(); 
    } 
} 
Смежные вопросы