如果我在继承BaseController的控制器中的操作上设置一个Attribute,是否可以在某个BaseController函数中获得该值?
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()
{...
选择了不同的路线。我可以简单地在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);
}
}
}