2011-03-29 68 views
0

本质上,我想要做的是在页面上动态地构建一个数据表,然后通过很长的3列宽的页面。水平显示记录ASP.NET MVC

工作过一个经典的ASP例子中,我尽量努力是得到了,但不是所有的记录显示,他们仍然在页面上呈现为行而不是列。

这里是我的失败代码:

<table width="750" cellpadding="0" cellspacing="0" border="0"> 
<% 
Dim recCount As Integer = 0 
For Each a In Model.Templates 
    If recCount Mod 3 = 0 Then 
     If recCount <> 0 Then 
      Response.Write("</tr>") 
      Response.Write("<tr><td>template found!</td>") 
     Else 
      Response.Write("<td>template found!</td>") 
     End If 
    End If 
    recCount = recCount + 1 
Next 
%> 
</table> 

我不是太某些如何做到这一点,我相当肯定它可能是非常简单的一个视图页面上做。

我的另一种选择是设置要创建的记录量有限,建立从页面上的表,但我宁愿做动态。

我猜也是另一种选择是使用一个中继器控制?虽然我不知道这是否可以与MVC协同工作。

在此先感谢您的帮助。

+0

你可以“画”你的意思?你在标题中说“水平显示记录......”,但是在你的文本中,无论多长,你都会提到3列。 – carlsb3rg 2011-03-29 12:26:22

+0

表格的长度会因行数而异,我想要的唯一固定的东西就是列数。 – LiamGu 2011-03-29 12:32:33

回答

1

想我明白你的意思。您想要在表中显示每行3条记录。对不起,我糟糕的VB:

<table...> 
<% var templatesCount = Model.Templates.Count %> 
<% For i = 0 To templatesCount - 1 Step 3 %> 
    <tr> 
    <% For j = 0 to 2 %> 
    <td> 
    <% If i + j < templatesCount %> 
     Template Found! 
    <% End If %> 
    <% Next j %> 
    </td> 
    </tr> 
<% Next i %> 
</table> 
+0

我该如何去访问Model.Templates中的实际值?除此之外,它工作得很好。 – LiamGu 2011-03-29 13:09:47

+0

'<(%)= Model.Templates [I] .SomeProperty%>' – carlsb3rg 2011-03-29 20:14:33

+0

或'<%= Model.Templates.GetNext()。SomeProperty%>' – carlsb3rg 2011-03-29 20:16:18

0

很难确切地知道你该要什么,和你不提供输出我就只给一些提示。

我建议做以下的,因为它会让你的生活变得更轻松,你的代码豆蔻清洁,调试应该有点简单:

  • 写一个辅助方法,这将做到这一点逻辑为你,这样你不会弄乱你的视图(http://www.asp.net/mvc/tutorials/creating-custom-html-helpers-cs)
  • 不使用Response.Write,因为这真的是回到传统的ASP日子,而是从你的Helper方法返回一个字符串。

然后,你可以非常容易地通过你的帮助器方法,并理智地检查正在返回的字符串。

+0

该计划是要建立一个帮手,一旦我看到,如果我能真正得到它的工作第一,然后我会整理一下,使之成为帮手。 – LiamGu 2011-03-29 12:36:17

1

如果你想使用一些HtmlHelpers您可以搜索MvcContrib项目 - 它拥有Html.Grid扩展方法。

或在MVC 3,你可以使用Html.WebGrid方法。

或者这里是asp.net mvc上的代码。

<table> 
    <tr> 
     <% int count = items.Count(); 
      int additionalCount = count % 3 == 0 ? 0 : 1; 
      int countPerColumn = count/3 + additionalCount; 
      int i = 0; 
      foreach(var item in items) 
      { 
      if (i % countPerColumn == 0 && i != 0) 
      {%> 
       </tr><tr> 
      <% } %> 
       <td><%= item.Name %></td> 
     <% i++; 
      } %>  
    </tr> 
</table> 

对不起,我不知道VB.NET。

+0

很遗憾,我们尚未作出从MVC 2的飞跃3 :( – LiamGu 2011-03-29 12:33:12

+0

使用的代码(这将是ASP的工作。净MVC从1到3 :)),或使用MvcContrib库 – 2011-03-29 12:34:43

+0

我曾与代码拨弄的小它仍然打印他们屏幕行,但我认为我对那里现在。谢谢。 – LiamGu 2011-03-29 13:07:32