代碼Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->ActionFilterAttribute是Action過濾類,該屬於會在執行一個action之前先執行.而ActionFilterAttribute是
VC的一個專門處理action過濾的類.基於這個原理,
假設某個action:AdminIndex,我們給該Action的最起碼訪問要求是用戶必須是登陸狀態.那么,我們要做的工作就是在
[CheckLogin()]//在該Action上面加一個判斷
public ActionResult AdminIndex()
{
return View();
} // end AdminIndex
上面說了,ActionFilterAttribute是過濾基類,所以CheckLogin()判斷要繼承ActionFilterAttribute如下:
public class CheckLoginAttribute : ActionFilterAttribute
{
public CheckLoginAttribute()
{}
} // end class CheckLoginAttribute
在ActionFilterAttribute基類中有個抽象方當
public abstract void OnActionExecuting(ActionExecutingContext filterContext);
顧名思義就是指當要執行一個Action之前要做啥工作.在CheckLoginAttribute繼承主類后,要將該OnActionExecuting(..)方法重寫如:
public override void OnActionExecuting(ActionExecutingContext filterContext)
{} // end Action
這樣的話,我們就可以將我們想做的處理寫在該方法里頭.如:
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
// 如果用戶沒有登陸
if(!UserLogin.IsLogined)
{
// 處理方法
ErrorRedirect(filterContext);
return;
}// end if
}
// 錯誤處理方法
private void ErrorRedirect(ActionExecutingContext filterContext)
{
filterContext.Result = new RedirectToRouteResult("Default", new RouteValueDictionary(new { controller = "Home", action = "Default" }));
} // end ErrorRedirect
當執行ErrorRedirect方法時,它會自己選擇指定的Route並跳轉到非AdminIndex的Action中.
Reference URL:http://www.cnblogs.com/zjc5284/archive/2010/04/25/1719956.html