2014-06-25 86 views

回答

51

你可以這樣做

public class SomeMsgAttribute : FilterAttribute, IResultFilter 
{ 
     public void OnResultExecuted(ResultExecutedContext filterContext) 
     { 
     } 

     public void OnResultExecuting(ResultExecutingContext filterContext) 
     { 
      filterContext.Controller.ViewBag.Msg= "Hello"; 
     } 
} 

使用:

[SomeMsg] 
public ActionResult Index() 
{ 
    return View(); 
} 
+0

你有什麼解釋爲什麼這可以在'執行'而不是'執行'中執行? –

+2

@TolgaEvcimen在渲染剃鬚刀視圖後調用'OnResultExecuted'。那時候,改變產量已經太遲了。 – DPac

+0

我明白了,我一直認爲它是在Action方法返回後立即調用的'OnResultExecuted',可惜:)我應該認爲它:)謝謝。 –

7

試試這個

public class CustomFilterAttribute : ActionFilterAttribute 
{ 
    public override void 
    OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     // get the view bag 

     var viewBag = filterContext.Controller.ViewBag; 

     // set the viewbag values 
     viewBag.CustomValue = "CustomValue"; 
    } 
} 
0

要從不同的控制器操作傳輸數據

public override void OnActionExecuting(ActionExecutingContext filterContext) 
{ 
    EmployeeTrackingSystemAndMISEntities db = new EmployeeTrackingSystemAndMISEntities(); 

    var UserCookie = filterContext.HttpContext.Request.Cookies["UserUniqueID"]; 


    RouteValueDictionary redirectTargetDictionary = new RouteValueDictionary(); 
    redirectTargetDictionary.Add("action", "UserLogIn"); 
    redirectTargetDictionary.Add("controller", "Login"); 

    var TempData = filterContext.Controller.TempData; 
    TempData["Status"] = "Please log in as Admin"; 

    filterContext.Result = new RedirectToRouteResult(redirectTargetDictionary); 

} 
相關問題