C#MVC:网格中的可选列(foreach)

时间:2009-06-08 20:02:59

标签: c# asp.net-mvc

我有这样的代码:

<% 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>

<% } %>

<% 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> <% } %>

我的问题:根据用户设置,可以将这些列的任何组合(标题,容量和/或计数)设置为不显示。

如何在我的代码中创建此条件?

5 个答案:

答案 0 :(得分:5)

在控制器端,您可以将设置存储在ViewData中:

base.ViewData["TitleVisible"] = false;

... 在视图中:

<% 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>

<% } %>

答案 1 :(得分: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); }%>

或其他许多方法之一。

答案 2 :(得分:1)

或者,您可以根据用户的设置创建不同的视图,从而将if逻辑保留在控制器中。可能或不是一个好主意,取决于应用程序的其余部分,但这是需要考虑的事情。

答案 3 :(得分:0)

您是否无法将用户的偏好设置存储在属性包中,然后在循环中引用这些首选项?

该行将由三个if语句组成,这些语句可以填充元素或空白元素。

答案 4 :(得分:0)

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

请记住考虑表数据为空的时间,否则您将遇到渲染问题。取出非破碎空间线的空间。