如何在ASP.NET MVC中跨4列-如何使我当前的代码不那么糟糕
我有下面的代码,我试图得到一个4列的表。如果列用完了,创建一个新行,再创建4个列。冲洗泡沫。重复一遍如何在ASP.NET MVC中跨4列-如何使我当前的代码不那么糟糕,asp.net,asp.net-mvc,Asp.net,Asp.net Mvc,我有下面的代码,我试图得到一个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
<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++;
} %>
这很有效,但很糟糕。框架中是否有内置的东西或我可以使用的扩展方法?我想我可以自己玩,但我想一定有什么东西在那里。你应该用else if替换第二个if。。除此之外,没关系
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++;
}%>
foreach(视图数据中的ItmXtnMultimedia.Model.ItmXtnMultimedia)
{
如果(i%4==0&&i==0)
{
%>
事实上,我把冷杉从环中弹了出来…(但仍然有气味)
进行一点重构怎么样
<%
foreach (ItmXtnMultimedia multimedia in ViewData.Model.ItmXtnMultimedia) {
manageColumnsForMe( 4 )
%><td><%= multimedia.ImgTag100 %></td><%
}
%>
然后将另一个代码放入一个函数中,使用一个静态变量来存储i
您可以使用不同列数重复使用相同的函数我假设ViewData.Model.itmxtn多媒体是某种类型的列表:
<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>
%>
代码仍然杂乱无章,但可能更具可读性?这是创建扩展方法的好地方。下面是一些几乎可编译的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();
}
public static void idunnowhatcallthis(
这对我很有帮助,
T[]项,
int列,
行动负责人模板,
动作项模板,
操作newRowTemplate,
操作(模板)
{
头模板();
对于(int i=0;i
下面是一个正在使用的示例:
<% Html.IDunnoWhatToCallThis(
ViewData.Model.ItmXtnMultimedia,
4,
() => %><table><tr><%,
(item) => %><td><%= item.ImgTag100 %></td><%,
() => %></tr><tr><%,
() => %></tr></table><%);%>
%%>%%>%%>
我喜欢这样的助手,混合了内联代码、lambda和标记。这就像看魔术一样。解析器杀死了我一半的第一条评论。我从循环中取出了第一个tr标记。
<% Html.IDunnoWhatToCallThis(
ViewData.Model.ItmXtnMultimedia,
4,
() => %><table><tr><%,
(item) => %><td><%= item.ImgTag100 %></td><%,
() => %></tr><tr><%,
() => %></tr></table><%);%>