2

ASP.NET MVCでdivテーブルを使用するためのより良い方法を見つけようとしています。問題は、従来のテーブルを使用する必要がある場合、1つのループではなく、大量のループを実行する必要があることです<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コードを生成するには、 TagBuilderクラス。

于 2009-07-22T08:38:45.453 に答える
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 に答える
0

これはかなり主観的な問題ですが、実際にはdivを使用する必要はないと思います。データのテーブルを表示しているだけなので、「table」タグが必要です。

divおよびCSSレイアウトの導入は、テーブルタグを置き換えることではなく、テーブルタグをフォーマットおよびレイアウトジョブから解放することです。

編集

さらに、あなたはまだ1つのループであなたの仕事をすることができます。列をループするのではなく、行(名前、電話番号...)をループしてみませんか

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

個人的には、代わりにテーブルを(trとtdと一緒に)使用することを好みますが。

于 2009-07-22T08:33:18.943 に答える
0

表形式のデータを表示する場合は、それがテーブルタグが存在する理由です。レイアウトに関しては、テーブルではなくdivのみが提案されます。したがって、Key-Valueタイプの情報を表示するときに、テーブルタグを使用してもまったく問題ありません。

于 2009-07-22T08:39:06.200 に答える