2011-01-17 14 views
1
public class Person 
{ 
    public string First { get; set; } 
    public string Last { get; set; } 
    public int Age { get; set; } 
    public IEnumerable<Child> Children { get; set; } 
} 

public class Child 
{ 
    public string First { get; set; } 
    public string Last { get; set; } 
    public int Age { get; set; } 
} 

IEnumerable<Person>のモデルからテーブルをレンダリングする方法を探しています。私は次の表を生成しようとしています:ASP.NET MVCグリッド/テーブル

<table> 
    <tr class="person"> 
     <td>First 1</td> 
     <td>Last 1</td> 
     <td>1</td> 
    </tr> 
    <tr class="child"> 
     <td>First 1</td> 
     <td>Last 1</td> 
     <td>1</td> 
    </tr> 
    <tr class="child"> 
     <td>First 2</td> 
     <td>Last 2</td> 
     <td>2</td> 
    </tr> 
    ... 
    ... 
</table> 

各人は行であり、それぞれの子は人の行の下の個々の行になります。これは、各人のためにIEnumerable<Person>に繰り返されます。

このようなテーブルを生成するグリッドまたはコンポーネントはありますか? MvcContrib's grid componentが見つかりましたが、これらの子行を生成できないようです。これを行うためにMvcContribのグリッドを拡張する方法はありますか?

答えて

3

あなたの出力に必要なものがテーブルであれば、ネストされたループのような単純なものがあなたのために働くでしょうか?

<table> 
<% foreach (Person person in Model) 
    { %> 

    <tr class="person"> 
    <td><%: person.First %></td> 
    <td><%: person.Last %></td> 
    <td><%: person.Age %></td> 
    </tr> 

    <% foreach (Child child in person.Children) { %> 

    <tr class="child"> 
    <td><%: child.First %></td> 
    <td><%: child.Last %></td> 
    <td><%: child.Age %></td> 
    </tr> 

    <%} %> 

<%} %> 
</table> 
+0

このタイプの入れ子は、当社のウェブサイトの多数のページで使用されています。それらはすべて同じスタイル/クラスを使用しますが、モデルは各ページでわずかに異なります。私はコピー/貼り付けを避けようとしていますが、このHTMLをすべて貼り付けて、カラムヘッダなどを変更しています。 – nivlam

3

私はそれらを作るの両方IPersonから実装し、その後、強くて、その後IPersonループに入力したDisplayTemplateを作成して呼び出すと、それ

public interface IPerson 
{ 
    string First { get; set; } 
    string Last { get; set; } 
    int Age { get; set; } 
} 

<%@ Control Language="C#" Inherits="ViewUserControl<IPerson>" %> 

<tr class="<%=Model.GetType().Name.ToLower() %>"> 
    <td><%: Model.First %></td> 
    <td><%: Model.Last %></td> 
    <td><%: Model.Age %></td> 
</tr> 

<table> 
<% foreach (Person person in Model) { %> 
    <%=Html.DisplayFor(m => person, "IPersonRow") %> 
    <% foreach (Child child in person.Children) { %> 
    <%=Html.DisplayFor(m => child, "IPersonRow") %> 
    <% } %> 
<% } %> 
</table> 
+0

悪い例を使ったかもしれません。 'Person'クラスと' Child'クラスは必ずしも同じプロパティを持つとは限りません。それらは全く異なるかもしれません。このタイプのネスティングは、当社のウェブサイトの多数のページで使用されています。それらはすべて同じスタイル/クラスを使用しますが、モデルは各ページでわずかに異なります。 – nivlam

+0

まだ悪いパターンではありません...あなたが必要とする可能性のある種類のものごとに行のDisplayTemplateを作成し、簡単にワイヤリングできます – hunter

0

すばらしいクエストn !!私たちは、次の操作を行うことができ

親子 親1子1、child2の 親2子3

YESの場合、

は、親のためのすべてのチャイルズを印刷するユーザーコントロールを作成しますため、このコントロールを使用します子列をレンダリングします。

他のクエリがある場合はお知らせください。

一緒に勉強しましょう