2011-06-28 60 views
1

如果我在繼承BaseController的控制器中的某個操作上設置了一個屬性,是否可以在某個BaseController函數中獲取該值?MVC在基本控制器中獲取ActionFilterAttribute值OnActionExecuting

public class BaseController : Controller 
{ 
    protected override void OnActionExecuting(ActionExecutingContext filterContext) 
    { .... want to get the value of DoNotLockPage attribute here? } 



public class CompanyAccountController : BaseController 
{ 
     [DoNotLockPage(true)] 
     public ActionResult ContactList() 
     {... 

回答

1

採取了不同的路線。 我可以簡單地在basecontroller中創建一個變量,並在任何操作中將其設置爲true。 但我想使用一個屬性,只是更容易理解代碼。 基本上在基本控制器我有代碼,將在某些條件下鎖定頁面,只能查看。 但是在基類中,這會影響每一頁,所以我總是需要設置一些操作來編輯。

我向basecontroller添加了一個屬性。 而在屬性的OnActionExecuting中,我能夠獲取當前控制器並將其屬性設置爲true。

這樣我就可以在ViewResult的覆蓋中獲得我的屬性設置。

我的屬性

[AttributeUsage(AttributeTargets.Method, AllowMultiple = true)] 
public sealed class DoNotLockPageAttribute : ActionFilterAttribute 
{ 
    private readonly bool _doNotLockPage = true; 

    public DoNotLockPageAttribute(bool doNotLockPage) 
    { 
     _doNotLockPage = doNotLockPage; 
    } 

    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     var c = ((BaseController)filterContext.Controller).DoNotLockPage = _doNotLockPage; 
    } 
} 

我的基本控制器

public class BaseController : Controller 
{ 
    public bool DoNotLockPage { get; set; } //used in the DoNotLock Attribute 

    protected override void OnActionExecuting(ActionExecutingContext filterContext) 
    { ...... } 

    protected override ViewResult View(string viewName, string masterName, object model) 
    { 
     var m = model; 

     if (model is BaseViewModel) 
     { 
      if (!this.DoNotLockPage) 
      { 
       m = ((BaseViewModel)model).ViewMode = WebEnums.ViewMode.View; 
      } 
      .... 
      return base.View(viewName, masterName, model); 
     } 

    } 
} 
相關問題