【问题标题】:ASP.NET MVC grid/tableASP.NET MVC 网格/表
【发布时间】:2011-01-17 04:39:09
【问题描述】:
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&lt;Person&gt;。我正在尝试生成下表:

<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&lt;Person&gt; 中的每个人重复。

是否有任何网格或组件可以生成这样的表格?我找到了MvcContrib's grid component,但它似乎无法生成这些子行。有没有办法扩展 MvcContrib 的网格来做到这一点?

【问题讨论】:

    标签: asp.net-mvc mvccontrib mvccontrib-grid


    【解决方案1】:

    如果您在输出中只需要一个表格,那么像嵌套循环这样简单的东西对您有用吗?

    <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>
    

    【讨论】:

    • 这种类型的嵌套用于我们网站的大量页面。它们都使用相同的样式/类,但每个页面上的模型略有不同。我试图避免复制/粘贴所有这些 HTML 并更改列标题等......
    【解决方案2】:

    我会让它们都从 IPerson 实现,然后创建一个强类型为 IPersonDisplayTemplate,然后循环调用它

    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>
    

    【讨论】:

    • 我可能举了一个不好的例子。 PersonChild 类不一定具有相同的属性。它们可能完全不同。这种类型的嵌套用于我们网站的大量页面。它们都使用相同的样式/类,但每个页面上的模型略有不同。
    • 仍然,不错的模式...为您可能需要的每种类型的东西创建一行 DisplayTemplate,您可以轻松地将其连接起来
    【解决方案3】:

    好问题!!我们可以做以下吗

    亲子 父 1 子 1、子 2 父 2 子 3

    如果是,

    创建一个用户控件,它将打印父级的所有子级,使用此控件呈现子列。

    如果您有任何其他查询,请告诉我。

    让我们一起学习

    【讨论】:

      【解决方案4】:

      您可以使用 jQuery 插件。以下是相当不错的:

      两者都是开源的。有一个商业版本的 jqGrid,它为您提供 MVC 助手来轻松创建表。

      【讨论】:

        猜你喜欢
        • 2013-12-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-14
        相关资源
        最近更新 更多