2011-03-29 86 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