2009-06-08 3 views
2

が、私はこのようなコードを持っている:C#MVC:グリッド内の任意の列(foreachの)

<% foreach (var item in Model) { %> 

    <tr> 
     <td> 
      <%= Html.Encode(item.Title) %> 
     </td> 
     <td> 
      <%= Html.Encode(item.Capacity) %> 
     </td> 
     <td> 
      <%= Html.Encode(item.Count) %> 
     </td> 
    </tr> 

<% } %> 

私の問題:ユーザ設定にこれらの列の任意の組み合わせによっては(タイトル、容量、および/またはカウント)表示しないように設定することができます。

私のコードでどのようにこの条件を作成しますか?ビュー内の

base.ViewData["TitleVisible"] = false; 

... :

答えて

5

コントローラ側では、あなたがのViewDataの設定を保存することができますが

<% foreach (var item in Model) { %> 

<tr> 
    <% if ((bool)ViewData["TitleVisible"]){ %> 
    <td> 
     <%= Html.Encode(item.Title) %> 
    </td> 
    <%}%> 
    <td> 
     <%= Html.Encode(item.Capacity) %> 
    </td> 
    <td> 
     <%= Html.Encode(item.Count) %> 
    </td> 
</tr> 

<% } %> 
0

あなたはプロパティで、ユーザーの好みを保存できませんでしたあなたのループでこれらの設定を参照してください。

行は、要素または空白要素で塗りつぶされた3つのifステートメントで構成されます。

1

ユーザ設定に応じて、これらの列(タイトル、 能力、および/またはカウント)のいずれかの 組み合わせは表示されませ に設定することができます。

これを行う方法はたくさんあります。これらの条件の記録および保管方法によって異なります。

<%if(item.ShowTitle){%> 
    <td> 
     <%= Html.Encode(item.Title) %> 
    </td> 
    <%}%> 

または

<%if(Session.Current.ShowTitle){%> 
    <td> 
     <%= Html.Encode(item.Title) %> 
    </td> 
    <%}%> 

やコードに表示するかを決定するヘルパーを作成

<% foreach (var item in Model) { Html.CreateItem(item); }%> 

またはあなたがそれを行うことができ、他の多くの方法の一つ。

0
<% foreach (var item in Model) { %> 
    <tr> 
     <td> 
      <% if(CONDITION) { 
      <%= Html.Encode(item.Title) %> 
      <% } else { %> 
      &nbsp ; 
      <% } %> 
     </td> 
    </tr> 
<% } %> 

テーブルのデータが空白の場合は、覚えておいてください。そうしないと、レンダリングの問題が発生します。しかし、非破壊スペースラインのスペースを取り出してください。

1

また、ユーザーの設定に応じて異なるビューを作成して、コントローラにifロジックを保持することもできます。アプリの残りの部分に応じて、良い考えではないかもしれませんが、それは何かを考えていることです。