.NET / MVC递归记录列表

时间:2010-09-14 18:34:39

标签: .net asp.net-mvc-2 recursion

我试图通过以下列方式列出内容,使我的内容CMS更加用户友好:

父 - 子页面 - - 子页面 - - - 子页面 - - - - 等...

使用.NET / MVC2,定义此函数的位置以及如何调用它。

这是我的页面,列出了我的内容:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Content.master" Inherits="System.Web.Mvc.ViewPage<dynamic>" %>

    <asp:Content ID="Head" ContentPlaceHolderID="HeadContent" runat="server">
    </asp:Content>

    <asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server">

        <ul>
            <%
                foreach (var item in Model) {
                    string contentTitle = item.Title;      
            %>
                <li class="row"><%: Html.ActionLink(contentTitle, "contentedit", new { id = item.ID }) %></li>
                <!-- List subpages recursively -->
            <% } %>
        </ul>

    </asp:Content>

这是我的控制器中的动作:

public ActionResult Content()
{
    // Get just parent items -- for now.
    List<SiteContent> viewData = DB.SiteContents.Where(c => c.ParentID == null).OrderBy(c => c.ParentID).ToList();


    return View(viewData);
}

2 个答案:

答案 0 :(得分:2)

这将是一个HTML助手:

public static class HtmlExtensions
{
    public static MvcHtmlString RenderRecords(this HtmlHelper htmlHelper, IEnumerable<SiteContent> model)
    {
        // TODO: ...
    }
}

您在视图中调用的内容:

<%= Html.RenderRecords(Model) %>

就实施而言,你可以看看Eric Lippert的博客,他最近wrote an article关于抛弃一个递归的树旧学校。您所需要的只是用适当的html标记(ulli)替换ASCII符号。使用TagBuilder也是一个好主意,而不是硬编码html标签。

答案 1 :(得分:0)

如果您只是想通过将数据传回View中来列出数据,则可以执行以下操作:

http://www.asp.net/mvc/tutorials/displaying-a-table-of-database-data-cs