C # MVC: необязательные столбцы в сетке (foreach) - PullRequest
2 голосов
/ 09 июня 2009

У меня есть такой код:

</p> <pre><code><% 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 ]

5 голосов
/ 09 июня 2009

На стороне контроллера вы можете сохранить настройки в 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 голос
/ 09 июня 2009

В качестве альтернативы, вы можете создавать различные представления в зависимости от настроек пользователя и, таким образом, сохранять логику if в контроллере. Может или не может быть хорошей идеей, в зависимости от остальной части приложения, но об этом стоит подумать.

1 голос
/ 09 июня 2009

В зависимости от пользовательских настроек любой Сочетание этих столбцов (Название, Емкость и / или счетчик) может быть установлен на не показывать.

Есть много способов сделать это. Зависит от того, как вы записываете и храните эти условия.

  <%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 голосов
/ 09 июня 2009
<% foreach (var item in Model) { %>
    <tr>
        <td>
            <% if(CONDITION) {
            <%= Html.Encode(item.Title) %>
            <% } else { %>
            &nbsp ;
            <% } %>
        </td>
    </tr>
<% } %>

Не забудьте учесть, когда данные таблицы пустые, иначе вы столкнетесь с проблемами рендеринга. Уберите пробел в неразрывной пробел.

0 голосов
/ 09 июня 2009

Не могли бы вы сохранить предпочтения пользователя в пакете свойств, а затем ссылаться на эти предпочтения в цикле?

Строка будет состоять из трех операторов if, которые либо рисуют заполненные элементы, либо пустые элементы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...