2010-06-10 32 views
4

在ASP.Net MVC中,有什么办法可以将以下代码压缩到单个foreach循环吗?如何在MVC中的单个foreach循环中创建一个水平表?

<table class="table"> 
    <tr> 
     <td> 
      Name 
     </td>  
     <% 
     foreach (var item in Model) 
     { 
     %> 
      <td> 
       <%= item.Name %> 
      </td> 
     <% 
     } 
     %> 
    </tr> 
    <tr> 
     <td> 
      Item 
     </td>  
     <% 
     foreach (var item in Model) 
     { 
     %> 
      <td> 
       <%= item.Company %> 
      </td> 
     <% 
     } 
     %> 
    </tr> 
</table> 

如果模型是一个IEnumerable<SomeObject>

public class SomeObject 
{ 
    public virtual Name {get;set;} 
    public virtual Company {get;set;} 
} 

这将输出一个表,如下所示:

Name  | Bob |  Sam | Bill |  Steve | 
Company | Builder | Fireman |  MS |  Apple | 

我知道我大概可以使用扩展方法写出来的每一行,但有可能在模型上使用一次迭代来构建所有行?

这是从question继续,因为我不满意我接受的答案,不敢相信我提供了最好的解决方案。

+0

AFAIK它不可能在给定condition.good问题单回路虽然:) – Salil 2010-06-10 07:15:56

+0

你有使用不同的结构,除了一个表考虑?在这种情况下对我来说没有意义。除IE6和7以外,CSS display:table-cell/table-row可能值得考虑。所以没有表格:) – Ahmad 2010-06-10 09:03:44

回答

0

如果你并不局限于使用纯表,那么这会为你工作。

<table class="table"> 
    <tr> 
     <th> 
      Name<br/> 
      Item<br/> 
     </th>  
     <% 
     foreach (var item in Model) 
     { 
     %> 
      <td> 
        <%= Html.Encode(item.Name) %><br/> 
        <%= Html.Encode(item.company) %><br/> 
      </td> 
     <% 
     } 
     %> 
    </tr> 
</table> 

你绝对可以通过使用span和css风格来改善这一点。

+0

在表格行中放置表头是否合法?无论如何,无论如何,可能只是将th设置为td。一个很好的例子。无论如何,必须比表格内的表格更好! – GenericTypeTea 2010-06-11 08:10:06

+0

@GeneticTypeTea,它绝对有效。在IE8和Firefox上测试。 “表格内的表格” 的一些优点是: 1)较少的带宽。 2)更容易与CSS风格。 – Syd 2010-06-12 07:54:53

0

检查下面垫它帮助你

<table class="table"> 
    <tr> 
     <td> 
      <table> 
       <tr><td>Name</td></tr> 
       <tr><td>Item</td></tr> 
      <table> 
     </td>  
     <% 
     foreach (var item in Model) 
     { 
     %> 
      <td> 
       <table> 
        <tr><td><%= item.Name %></td></tr> 
        <tr><td><%= item.company %></td></tr> 
       <table> 
      </td> 
     <% 
     } 
     %> 
    </tr> 
</table> 

注: -

No check though :) 
+0

嘿,聪明。我喜欢它,但我因为喜欢而感到肮脏。我认为我更喜欢我的答案在桌子上>桌子解决方案,但聪明的思维! – GenericTypeTea 2010-06-10 08:20:21

+0

@GenericTypeTea: - 是啊!我同意你的肮脏。我也不介意table> in table解决方案中的2个循环。但它只有4条记录。 Cheer's – Salil 2010-06-10 08:26:48

0

很老的线程,但...

我用以下的(但一直在寻找一个更好的办法,当我遇到这个问题就来了)

创建一个代码块,通过对象循环并为变量中的每一行创建HTML,然后输出该变量。

加号是你只循环一次,没有嵌套表(所以事情更可能排队),但减号是字符串操作的HTML。

可能应该使用stringbuilder而不是字符串,但原理是一样的。

@code 
     Dim tr1 As String = "<th>Name</th>" 
     Dim tr2 As String = "<th>Company</th>" 

     For Each thingy As object In Model 

      tr1 += "<th>" & thingy.Name & "</th>" 
      tr2 += "<th>" & thingy.Company & "</th>" 

     Next 



     End Code 

     @<table class="table table-condensed"> 
      <tr>@Html.Raw(tr1)</tr> 
      <tr>@Html.Raw(tr2)</tr> 
     </table> 
相关问题