2010-09-14 48 views
2

我試圖讓我的內容CMS的更多用戶通過下面的方式上市含量友好:.NET/MVC遞歸備案清單

家長 - 子頁 - - 子頁 - - - 子頁 - - - - 等...

使用.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

這將是一個HTML幫助:

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

您的視圖內撥打:

<%= Html.RenderRecords(Model) %> 

至於執行而言,你可以看看埃裏克利珀的博客最近誰wrote an article約傾倒遞歸樹老派。所有你需要的是用適當的html標籤替換ASCII符號(ul,li)。使用TagBuilder也不是硬編碼html標記的好主意。

+0

MvcHtmlString(或其後繼者,HtmlString)屬於哪個程序集/指令? TODO也是一些LINQ和遞歸調用自己? – 2010-09-14 19:29:31

+0

參考:[MvcHtmlString](http://msdn.microsoft.com/en-us/library/system.web.mvc.mvchtmlstring.aspx)。就TODO而言,正如我在回答結帳時提到的那樣,鏈接的[博客文章](http://blogs.msdn.com/b/ericlippert/archive/2010/09/09/old- school-tree-display.aspx)這將有助於實施它。我相信您不會期望我們在您的位置編寫代碼,因此請不要猶豫,詢問您是否在實施提議的解決方案時遇到了一些具體問題。 – 2010-09-14 19:45:41