2

我正在尝试找到一种更好的方法来使用带有 ASP.NET MVC 的 div 表,我看到的问题是,如果我必须使用传统<table>表,则需要执行大量循环,而不是一个循环。

例子

<div class="column">
  <div class="row">Name</div>
    <% foreach (Person person in (List<Person>)ViewData.Model) {%>
      <div class="row"><%= Html.Encode(person.Name) %></div>
    <%} %>
  </div>
<div class="column">
  <div class="row">Email</div>
    <% foreach (Person person in (List<Person>)ViewData.Model) {%>
      <div class="row"><%= Html.Encode(person.Email) %></div>
    <%} %>
  </div>
<div class="column">
  <div class="row">Phone</div>
    <% foreach (Person person in (List<Person>)ViewData.Model) {%>
      <div class="row"><%= Html.Encode(person.Phone) %></div>
    <%} %>
  </div>
4

4 回答 4

10

如果它看起来像一张桌子,闻起来像一张桌子,为什么不使用一张桌子呢?

但是,如果您想以这种方式很好地做到这一点,请尝试为您的 Html 属性构建一个扩展方法,该方法生成此 html 代码并将列表作为参数,也许还有列的列表,要生成您的 html 代码,您可以使用标签生成器类。

于 2009-07-22T08:38:45.453 回答
0

这是一个相当主观的问题,但我认为您实际上并不需要使用 div 来这样做,因为您只是显示数据表,这就是我们需要“table”标签的原因。

div 和 CSS 布局的引入并不是要替换 table 标签,而是要让 table 标签从格式化和布局工作中解放出来。

编辑

此外,您仍然可以在一个循环中完成您的工作。与其遍历列,不如遍历行(姓名、电话...)

<% foreach(Person person in (List<Person>)ViewData.Model)) %>
<div class="row">
    Name: <%= Html.Encode(person.Name) %>
    Email: <%= Html.Encode(person.Email) %>
    ...
</div>

虽然我个人仍然更喜欢使用 table(连同 tr 和 td)来代替。

于 2009-07-22T08:33:18.943 回答
0

如果您要显示表格数据,这就是表格标签存在的原因。人们只建议 div,而不是关于布局的 table。因此,当您显示键值类型的信息时,使用 table 标记是完全可以的。

于 2009-07-22T08:39:06.200 回答
0

我同意其他人所说的(你真的应该只使用一张桌子) - 但是我也会尝试为你的问题想出一个解决方案。

我认为没有一种优雅的方法可以克服“循环不止一次”的问题,但至少我们可以让向列表中添加新列更“容易”:

var myList = (List<Person>)ViewData.Model;
var myColumns = new Dictionary<string, List<string>>();

myColumns.Add("Name", new List<string>());
myColumns.Add("Email", new List<string>());
myColumns.Add("Phone", new List<string>());
foreach(var person in myList){
    myColumns["Name"].Add(Html.Encode(person.Name));
    myColumns["Email"].Add(Html.Encode(person.Email));
    myColumns["Phone"].Add(Html.Encode(person.Phone));
}

然后现在你可以这样做:

<% foreach(var column in myColumns){ %>
<div class="column">
  <div class="row"><%= column.Key %></div>
    <% foreach (string value in column.Value) {%>
      <div class="row"><%= value %></div>
    <%} %>
  </div>
<% } %>

与使用 -tag 相比,它的性能仍然很差,而且我真的不明白为什么在这种情况下要避免这种情况。

于 2009-07-22T08:53:42.070 回答