我有一个类别中的一组项目的嵌套数据对象。每个类别可以包含子类别,并且没有对子类别的深度设置限制。 (文件系统将具有类似的结构。)它看起来像这样:
class category { public int id; public string name; public IQueryable<category> categories; public IQueryable<item> items; } class item { public int id; public string name; }
我将类别列表传递给我的视图为IQueryable< category> ;.我想将类别输出为一组嵌套的无序列表(< ul>)块。我可以嵌套foreach循环,但是子类的深度将受到嵌套foreach块的数量的限制。在WinForms中,我使用递归来完成类似的处理来填充TreeView,但是在ASPX MVC视图中没有看到任何使用递归的例子。
可以在ASPX视图中递归吗?还有其他视图引擎包含递归视图输出?
解决方法
创建自己的HtmlHelper扩展方法,如下所示:
namespace System.Web.Mvc { public static class HtmlHelperExtensions { public static string CategoryTree(this HtmlHelper html,IEnumerable<Category> categories) { string htmlOutput = string.Empty; if (categories.Count() > 0) { htmlOutput += "<ul>"; foreach (Category category in Categories) { htmlOutput += "<li>"; htmlOutput += category.Name; htmlOutput += html.CategoryTree(category.Categories); htmlOutput += "</li>"; } htmlOutput += "</ul>"; } return htmlOutput; } } }
有趣的是你应该问,因为我昨天才真正创造了其中之一。