採取了不同的路線。 我可以簡單地在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);
}
}
}