1

BaseController を継承するコントローラーのアクションに属性を設定した場合、その値を 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()
        {...
4

1 に答える 1

1

別のルートを取りました。ベースコントローラーで変数を作成し、それを任意のアクションでtrueに設定するだけで済みます。しかし、コードを理解しやすい属性を使用したかったのです。基本的に、ベースコントローラーには、特定の条件下でページをロックするコードがありました。表示のみです。しかし、基本クラスにいると、これはすべてのページに影響します。編集するように常に設定する必要のあるアクションがいくつかありました。

ベースコントローラーにプロパティを追加しました。また、属性の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);
        }

    }
}
于 2011-06-29T13:19:36.843 に答える