Пошли другим путем. Я мог бы просто создать переменную в базовом контроллере и установить для нее значение 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);
}
}
}
person
Yogurt The Wise
schedule
29.06.2011