.NET/MVC递归记录列表

.NET/MVC递归记录列表,.net,asp.net-mvc-2,recursion,.net,Asp.net Mvc 2,Recursion,我正试图通过以下方式列出内容,使我的内容CMS更加用户友好: 母公司 -子页 --子页 -——子页 -————等等 使用.NET/MVC2,该函数将在何处定义以及如何调用。 这是我的页面,列出了我的内容: <%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Content.master" Inherits="System.Web.Mvc.ViewPage<dynamic>" %> <

我正试图通过以下方式列出内容,使我的内容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);
}
public ActionResult Content()
{
//现在只获取父项。
List viewData=DB.SiteContents.Where(c=>c.ParentID==null).OrderBy(c=>c.ParentID.ToList();
返回视图(viewData);
}

如果您只是试图通过将数据传回视图来列出数据,您可以执行以下操作:


这将是一个HTML助手:

public static class HtmlExtensions
{
    public static MvcHtmlString RenderRecords(this HtmlHelper htmlHelper, IEnumerable<SiteContent> model)
    {
        // TODO: ...
    }
}
public静态类
{
公共静态MvcHtmlString渲染记录(此HtmlHelper HtmlHelper,IEnumerable模型)
{
//TODO:。。。
}
}
您在视图中称之为:

<%= Html.RenderRecords(Model) %>


就实现而言,你可以看看Eric Lippert的博客,他最近提到了抛弃递归树的老方法。您只需将ASCII符号替换为适当的html标记(
ul
li
)。另外,使用a代替硬编码html标记也是一个好主意。

MvcHtmlString(或其后继者HtmlString)属于哪个程序集/指令?TODO也是某种LINQ和对自身的递归调用吗?引用:。就TODO而言,正如我在回答中已经提到的,签出链接将有助于实现它。我相信您不会期望我们代替您编写代码,所以请不要犹豫,询问您在实现建议的解决方案时是否存在一些具体问题。