Как сделать 4 колонки в ASP.NET MVC - Как сделать мой текущий код меньше сосать - PullRequest
2 голосов
/ 13 ноября 2008

У меня есть следующий код, я пытаюсь получить таблицу с 4 столбцами. Если у меня закончатся колонны, создайте новую строку и сделайте еще 4 кунна. прополоскать. мыльная пена. повторить.

<tbody>
<%
int i = 0;
foreach (ItmXtnMultimedia multimedia in ViewData.Model.ItmXtnMultimedia) {
  if (i%4 == 0 && i== 0)
  {
    %><tr><%
  }
  if (i%4 == 0 && i != 0)
  {
    %></tr><tr><%
  }
  %>                    
  <td><%= multimedia.ImgTag100 %></td>                            
  <%
  i++;
  } %>                    

Это работает, но это отстой. Есть ли что-то встроенное в каркас или метод расширения, который я могу использовать? Я думаю, я мог бы катиться самостоятельно, но подумал, что должно быть что-то там.

Ответы [ 5 ]

2 голосов
/ 13 ноября 2008

Это хорошее место для создания метода расширения. Вот несколько почти компилируемых псевдокодов C #:

public static void IDunnoWhatToCallThis<T>(
    this HtmlHelper me, 
    T[] items,
    int columns,
    Action headerTemplate,
    Action<T> itemTemplate,
    Action newRowTemplate,
    Action footerTemplate )
{
  headerTemplate();

  for(int i = 0;i < items.Length; i++)
  {
    if(i != 0 && i%columns == 0)
      newRowTemplate();

    itemTemplate(items[i]);
  }

  footerTemplate();
}

А вот пример использования:

<% Html.IDunnoWhatToCallThis(
  ViewData.Model.ItmXtnMultimedia,
  4,
  () => %><table><tr><%,
  (item) => %><td><%= item.ImgTag100 %></td><%,
  () => %></tr><tr><%,
  () => %></tr></table><%);%>

Я ЛЮБЛЮ таких помощников, смешиваю встроенный код, лямбды и разметку. Это как смотреть магию.

1 голос
/ 13 ноября 2008

На самом деле, я выкинул ель из петли ... (все еще пахнет)

                <tbody>
                    <tr>
                    <%
                    int i = 0;
                    foreach (ItmXtnMultimedia multimedia in ViewData.Model.ItmXtnMultimedia) {

                        if (i%4 == 0)
                        {
                            %></tr><tr><%
                        }
                        %>                    
                        <td><%= multimedia.ImgTag100 %></td>                            
                        <%
                        i++;
                    } %>                    
                </tbody> 
0 голосов
/ 13 ноября 2008

Я предполагаю, что ViewData.Model.ItmXtnMultimedia - это какой-то список:

<tbody>
<%
    for (int i = 0; i < ViewData.Model.ItmXtnMultimedia.Count; i++ )
    {
        %><tr><%
        for (int j = 0; i < 4; j++)
        {
            if (i < ViewData.Model.ItmXtnMultimedia.Count)
            {
                %><td><%= ViewData.Model.ItmXtnMultimedia[i].ImgTag100 %> %></td><%
            }
            else
            {
                %><td></td><%
            }
        }
        %></tr><%
    } 
%>
</tbody>

Все еще беспорядок кода, но, возможно, более читабельный?

0 голосов
/ 13 ноября 2008

А как насчет небольшого рефактора?

<%
foreach (ItmXtnMultimedia multimedia in ViewData.Model.ItmXtnMultimedia) {
  manageColumnsForMe( 4 )
  %><td><%= multimedia.ImgTag100 %></td><%
  } 
%>

И помещаем другой код в функцию, используя статическую переменную для хранения i

Вы можете использовать одну и ту же функцию с разным количеством столбцов

0 голосов
/ 13 ноября 2008

Вам следует заменить второе, если на другое, если .. Кроме этого, все в порядке.

foreach (ItmXtnMultimedia multimedia in ViewData.Model.ItmXtnMultimedia) 
{
  if (i%4 == 0 && i== 0)
  {
      %><tr><%
  }
  else if (i%4 == 0 && i != 0)
  {
      %></tr><tr><%
  }
  %><td><%= multimedia.ImgTag100 %></td><%
  i++;
}%>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...