2017-06-02 8 views
0

特定の状況では、私のチームの開発者が、剃刀のビューで@Layoutを指定するのを止めるルールを適用したいと考えています。私たちの意見ではレイアウトが一定になるので、私のチームメンバーが正しく設定したり、設定することを心配する必要はありません。ビューでレイアウトが指定されているかどうかを検出しますか?

これを行うには、アクションフィルタを作成し、ViewResult.MasterNameがNULL /空でないかどうかを検出してから、洞察力のあるエラーメッセージで例外をスローします。私はActionExecuting、ActionExecuted、ResultExecutedアクションフィルターを試しましたが、すべてのケースで.MasterNameプロパティーはビューに指定されていても常に空です。アクションフィルタでこれを検出することは不可能ですか?アクションフィルタで利用できない場合、これを検出して停止するための他のメカニズムがありますか?

答えて

0

MasterNameプロパティはViewResultクラスに設定されています。私は、誰かがビューに@Layoutを設定しなかった場合でも、直接かみそりビューに設定されている@Layoutを防止する方法があるだろうとは思わない

public class LayoutFilter : ActionFilterAttribute 
{ 
    public override void OnActionExecuted(ActionExecutedContext filterContext) 
    { 
     var result = filterContext.Result as ViewResult; 
     if (result != null) 
     { 
      result.MasterName = "~/Views/Shared/_MyLayout.cshtml"; 
     } 
    } 
} 

ActionFilterはレイザービューで@Layoutを介して指定されているものより優先されますそれでも、上記を使用してオーバーライドされます。 [LayoutFilter]属性を使用して適用するコントローラ/アクションを選択的に適用することはできます。

もう一つの方法は、RouteConfigに必要なレイアウトを設定して、答えhereあたりとしてoverride ViewResultへの希望:いずれかの方法を

、それが役に立てば幸い。

関連する問題