2011-01-17 3 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 grid/table

<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, а затем создать DisplayTemplate, который был сильно типизированных к IPerson затем петли до конца и назвать его

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

Это хорошее Questio п !! Можем ли мы сделать следующее

Родитель ребенок Родитель 1 ребенок 1, child2 Родитель 2 ребенка 3

Если да,

Создать пользовательский элемент управления, который будет печатать все Чайлдс для родителей, использовать этот элемент управления для рендеринг дочернего столбца.

Пожалуйста, дайте мне знать, если у вас есть другой запрос.

Давайте учиться вместе

0

Вы можете использовать плагины jQuery. Ниже неплох:

Оба с открытым исходным кодом. Есть коммерческая версия jqGrid, которая дает вам помощники MVC для легкого создания таблиц.

Смежные вопросы