2017-08-22 4 views
-1

私は部分ビューを1つ持っています_Layoutこれはすべてのビューで使用され、各ビューは強く型付けされたビューです。 私のクエリは、ログインしている各ユーザーが部門に所属しており、特定の部門のユーザーがWebサイトにログインして他のすべてのユーザーのすべてのタブを表示しているときに、(一部のビューから)一部のタブを非表示にしたい。 私は、すべてのActionResultに部門名を取得するためにLINQクエリを置くViewBagに保存し、共有ビューで条件を入れて試してみました:私はViewBagを宣言し、すべてののActionResultにLINQクエリを行う必要があり、このため剃刀MVCプロジェクトのすべてのビューで使用されている部分ビューにLINQ条件を入れる方法は?

 @if (ViewBag.Department == "CUSTOMER SUPPORT") 
     { 
      //View all the tabs 
     } 
     else 
     { 
      //Restricted tabs 
     } 

ユーザーが共有ビューに表示されているタブから別のページに移動しても、タブを非表示にすることができます。

私はまた、モデルに部門名の値が保持されるように部分ビューを強く型付けしてみましたが、強く型付けされた別のビューに移動すると機能しません。

私は何らかの形で、部門名を格納する変数をグローバルに宣言し、すべてのActionResultで宣言する代わりに共有ビューを呼び出すことはできますか? 共有ビューでLINQを使用するような、コントローラなしの共有ビューでDepartmentの名前を直接取得していますか?

答えて

1

これに対してアクションフィルタを作成できます。

public class SomeMsgAttribute : FilterAttribute, IResultFilter 
{ 
     public void OnResultExecuted(ResultExecutedContext filterContext) 
     { 
     } 

     public void OnResultExecuting(ResultExecutingContext filterContext) 
     { 
      filterContext.Controller.ViewBag.Department= "Department"; 
     } 
} 

この属性でコントローラを飾ることができます。私はあなたが間違って取得しないと、あなたのタブがナビゲーションのようなものと内容でない場合、これはあなたを助けることができる

[SomeMsg] 
public class MyController: Controller 
{ 
    public ActionResult Index() 
    { 
     return View(); 
    } 
} 
+0

を使用してレイアウトビュー内から上記のアクションを呼び出すビューモデルを満たしていると上記のアクション(、表示するタブを決める)

  • を作成します。あなたはこれがOPのためにどのように機能するかの実際の例を提供しています。なぜなら、私はこれが完全に質問に答えるとは思わないからです – Izzy

  • 2

    Use of child action in layout view

    1. 専用のビューモデルとナビゲーション用に別のビューを作成します。
    2. 私があれば、それは有益なことだと思うHtml.Action
    3. @
    関連する問題