2008-11-13 8 views
2

J'ai le code suivant, j'essaye d'obtenir une table avec 4 colonnes à travers. Si je n'ai plus de colonnes, créez une nouvelle ligne et faites 4 autres appels. rincer. mousse. répéter.Comment faire 4 colonnes à travers dans ASP.NET MVC - Comment faire pour que mon code actuel suce moins

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

Il fonctionne, mais il suce. Y a-t-il quelque chose de intégré au cadre ou une méthode de prolongation que je peux utiliser? Je suppose que je pourrais rouler le mien, mais je pensais qu'il devait y avoir quelque chose là-bas.

Répondre

-1

Qu'en est-il un peu refactoriser?

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

Et mettre l'autre code dans une fonction en utilisant une variable statique pour stocker i

Vous pouvez réutiliser la même fonction avec un nombre différent de colonnes

0

Vous devriez remplacer le second si sinon avec. Sinon, ça va.

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++; 
}%> 
1

En fait, je l'ai sauté de sapin de la boucle ... (sent encore bien)

   <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

analyseur tué la moitié de mon premier commentaire. J'ai sorti la première balise tr de la boucle. –

0

Je suppose ViewData.Model.ItmXtnMultimedia est une liste de quelque sorte:

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

Toujours un tas de code, mais peut-être plus lisible?

2

C'est un bon endroit pour créer une méthode d'extension. Voici quelques presque compilable C# pseudocode:

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(); 
} 

Et voici un exemple utilisé:

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

J'AIME des aides comme celui-ci, le mélange de code en ligne, lambdas et balisage. C'est comme regarder la magie.

Questions connexes