2011-01-06 18 views
22

私のビューでは、ユーザーロールに基づいて非表示にして表示したい管理リンクがいくつかあります。ビュー内でのASP.NET MVCチェックの役割

<%= if(CHECK IF USER ROLE ADMIN) { %> 
     <div class="tools"> 
      <ul> 
       <li class="edit"><%= Html.ActionLink("Edit", "Edit", new { id = Model.storyId }) %></li> 
       <li class="delete"><%= Html.ActionLink("Delete", "Delete", new { id = Model.storyId }) %></li> 
      </ul> 
     </div> 
<%= } %> 
+7

このチェックをあなたのアクションで実行し、その値をViewDataハッシュまたはあなたのビューをダムに保つためにあなたのビューモデルのプロパティ。 – R0MANARMY

+0

私は単純なif文を使ってビューをチェックする方が好きです。私は前にそれをやったが、コードを覚えていない。 – Cameron

+1

あなたが以前にそれをしたからといって、それは素晴らしいアイデアにはなりません。あなたの視点に入れたコードは(少なくとも簡単に)テストやリファクタリングを書くことはできません。 Rob Connery氏はまた、「タグ・スープを避ける」(http://blog.wekeroad.com/blog/asp-net-mvc-avoiding-tag-soup/)の記事を書きました。 – R0MANARMY

答えて

22
<% if (Page.User.IsInRole("Admin")){ %> 

<%}%> 

しかし、これは私の意見で恐ろしい考えです。 ViewDataまたはModelに、ビューの表示内容を表すようにし、ビューで単純にビューデータをチェックできるようにする方がよいでしょう。コントローラー基本クラスまたはアクションフィルターは、これを非常に単純に繰り返し使用し、コードを1か所に存在させることができます。

+0

私は通常、この種の情報をコントローラから送るためにViewModelを使います。しかし、私は主な_Layout.cshtmlにロールに基づいて特定のものを表示しようとしています。ちょうど "ひどい"というアイデアは、なぜ、そして、なぜですか?厳密に型指定された部分的なビューを作成するだけで、コンテンツを表示したり隠したりするクラスを追加する価値がありますか?これは、_Layoutの細かい方法でヘルパーメソッドを選択して使用するのですか?物事は「恐ろしいアイデア」であるという一般化された主張について、私はちょっと神経質になります。 – Methodician

+0

ビューモデルに表示するものを定義して、コントローラ(またはコントローラが使用するクラス)内のすべての役割ロジックを解消し、ビューモデルを適切に割り当てることができます。それを直接チェックすることはまだ有効ですが、大規模なプロジェクトでは維持管理が難しく、対処するのが面倒です。 – CRice

+0

あなたの状況に応じて、価値があるかどうかに関わらず、電話をかけることができます。 – CRice

0

大部分の人は、コントローラや他のビジネスサービスによってこのデータが「あらかじめ決められて」提供されることに同意しますが、ビューは可能な限りHTMLマークアップと言語制御構造を使用しますjquery、cssなどの他の典型的なウェブページ構築物を使用して「ページを作成する」

+1

私はあなたの声明をかなり理解していませんが、あなたは言い換えることができますか? –

38
@if (this.User.IsInRole("Administrator")) 
{ 

} 
+2

これが受け入れられる回答である必要があります。これを使用して –

+1

。問題を解決した – PAVITRA

関連する問題