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

我有这样的代码:

              

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

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

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

 base.ViewData["TitleVisible"] = false; 

……在视图中:

 <% foreach (var item in Model) { %>  <% if ((bool)ViewData["TitleVisible"]){ %>  <%= Html.Encode(item.Title) %>  <%}%>  <%= Html.Encode(item.Capacity) %>   <%= Html.Encode(item.Count) %>   <% } %> 

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

有很多方法可以做到这一点。 取决于您如何记录和存储这些条件。

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

要么

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

或创建一个帮助程序,决定在代码中显示什么:

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

或者你能做到的许多其他方式之一。

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

你不能将用户的偏好存储在属性包中,然后在循环中引用这些首选项吗?

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

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

请记住在表数据为空白时进行说明,否则您将遇到渲染问题。 取出非破碎空间线的空间。