Сетка/таблица ASP.NET MVC

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>. Я пытаюсь создать следующую таблицу:

<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, но, похоже, он не может генерировать эти дочерние элементы. ряды. Есть ли способ расширить сетку MvcContrib для этого?


person nivlam    schedule 17.01.2011    source источник


Ответы (4)


Если все, что вам нужно в вашем выводе, это таблица, подойдет ли вам что-то столь же простое, как вложенный цикл?

<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>
person kristian    schedule 17.01.2011
comment
Этот тип вложенности используется на большом количестве страниц нашего веб-сайта. Все они используют одни и те же стили/классы, но модель немного отличается на каждой странице. Я пытаюсь избежать копирования/вставки всего этого HTML и изменения заголовков столбцов и т.д.... - person nivlam; 17.01.2011

Я бы сделал их обоих реализованными из 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>
person hunter    schedule 17.01.2011
comment
Возможно, я привел плохой пример. Классы Person и Child не обязательно имеют одинаковые свойства. Они могут быть совершенно разными. Этот тип вложенности используется на большом количестве страниц нашего веб-сайта. Все они используют одни и те же стили/классы, но модель немного отличается на каждой странице. - person nivlam; 17.01.2011
comment
тем не менее, неплохой шаблон... создайте строку DisplayTemplate для каждого типа вещей, которые вам могут понадобиться, и вы можете легко подключить их - person hunter; 17.01.2011

Хороший вопрос!! Можем ли мы сделать следующее

Родитель дочерний Родитель 1 дочерний 1, дочерний 2 Родительский 2 дочерний 3

Если да,

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

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

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

person Ajay Rathi    schedule 17.01.2011

Вы можете использовать плагины jQuery. Следующее очень хорошо:

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

person jgauffin    schedule 17.01.2011