我有一种感觉,我正在做这个可怕的,可怕的错误。嵌套循环?列出子类别的最佳做法是什么?我有一种感觉,它涉及在我的控制器动作中准备列表,并通过一些动作结果发送给客户端,但我不知道从哪里开始?任何人都能指出我正确的方向?这里是我的哈克代码:使用asp.net生成类别和子类别列表mvc2
<h2>Categories</h2>
<a href="javascript:;" onclick="newCategory()">Create New Category</a>
<br />
<ul class="parent">
<%foreach (var category in Model.Categories){%>
<%-- List all of the top-level parent categories --%>
<%if (category.IsParent && category.ParentId == 0)%>
<li>
<span class="buttons"><a href="javascript:;" onclick="editCategory(<%:category.CategoryId%>)" class="edit"></a> <a href="javascript:;" onclick="deleteCategory(<%:category.CategoryId%>)" class="delete"></a></span>
<span class="categoryName"><%:category.CategoryName%></span>
<span class="positionButtons"><%:Html.ActionLink(" ", "MoveCategoryUp", new {id = category.CategoryId},
new {Class = "moveUp"})%><%:Html.ActionLink(" ", "MoveCategoryDown", new {id = category.CategoryId},
new {Class = "moveDown"})%></span>
<%-- List all of the subs for each parent --%>
<ul>
<%-- Level 1 --%> <%foreach (var sub1 in Model.Categories){%>
<%if (sub1.ParentId == category.CategoryId){%>
<li>
<span class="buttons"><a href="javascript:;" onclick="editCategory(<%:sub1.CategoryId%>)" class="edit"></a> <a href="javascript:;" onclick="deleteCategory(<%:sub1.CategoryId%>)" class="delete"></a></span>
<span class="categoryName"><%:category.CategoryName%></span>
<span class="positionButtons"><%:Html.ActionLink(" ", "MoveCategoryUp", new {id = sub1.CategoryId},new {Class = "moveUp"})%><%:Html.ActionLink(" ", "MoveCategoryDown", new {id = sub1.CategoryId},new {Class = "moveDown"})%></span>
<%-- List all of the subs for each parent --%>
<%if (sub1.IsParent){%>
<ul>
<%-- Level 2 --%> <%foreach (var sub2 in Model.Categories){%>
<%if (sub2.ParentId == sub1.CategoryId){%>
<li>
<span class="buttons"><a href="javascript:;" onclick="editCategory(<%:sub2.CategoryId%>)" class="edit"></a> <a href="javascript:;" onclick="deleteCategory(<%:sub2.CategoryId%>)" class="delete"></a></span>
<span class="categoryName"><%:category.CategoryName%></span>
<span class="positionButtons"><%:Html.ActionLink(" ", "MoveCategoryUp", new {id = sub2.CategoryId},new {Class = "moveUp"})%><%:Html.ActionLink(" ", "MoveCategoryDown", new {id = sub2.CategoryId},new {Class = "moveDown"})%></span>
<%-- List all of the subs for each parent --%>
<%if (sub2.IsParent){%>
<ul>
<%-- Level 3 --%> <%foreach (var sub3 in Model.Categories){%>
<%if (sub3.ParentId == sub2.CategoryId){%>
<li>
<span class="buttons"><a href="javascript:;" onclick="editCategory(<%:sub3.CategoryId%>)" class="edit"></a> <a href="javascript:;" onclick="deleteCategory(<%:sub3.CategoryId%>)" class="delete"></a></span>
<span class="categoryName"><%:category.CategoryName%></span>
<span class="positionButtons"><%:Html.ActionLink(" ", "MoveCategoryUp",new {id = sub3.CategoryId},new {Class = "moveUp"})%><%:Html.ActionLink(" ", "MoveCategoryDown",new {id = sub3.CategoryId},new {Class = "moveDown"})%></span>
<%-- List all of the subs for each parent --%>
<%if (sub3.IsParent){%>
<ul>
<%-- Level 4 --%> <%foreach (var sub4 in Model.Categories){%>
<%if (sub4.ParentId == sub3.CategoryId){%>
<li>
<span class="buttons"><a href="javascript:;" onclick="editCategory(<%:sub4.CategoryId%>)" class="edit"></a> <a href="javascript:;" onclick="deleteCategory(<%:sub4.CategoryId%>)" class="delete"></a></span>
<span class="categoryName"><%:category.CategoryName%></span>
<span class="positionButtons"><%:Html.ActionLink(" ", "MoveCategoryUp", new {id = sub4.CategoryId}, new {Class = "moveUp"})%><%:Html.ActionLink(" ", "MoveCategoryDown", new {id = sub4.CategoryId}, new {Class = "moveDown"})%></span>
<%-- If more than 4 levels of subcategories are required, put another level here --%>
</li>
<%}%>
<%}%>
</ul>
<%}%>
</li>
<%}%>
<%}%>
</ul>
<%}%>
</li>
<%}%>
<%}%>
</ul>
<%}%>
</li>
<%}%>
<%}%>
</ul>
</li>
<%}%>
</ul>
编辑
不幸的是这个代码不渲染我在寻找的结果,所以我不能真正提供远不止此:http://jsfiddle.net/EeaGr/每个项目都有按钮用于其类别的编辑/删除和上移/移动选项。我的类别具有以下属性:
类别ID:整数
名称:字符串
PARENTID:整数
IsParent:布尔
位置:整数
上帝的圣母。 – 2010-09-24 21:11:35
我有点难以想象这个输出!有没有可能在http://jsfiddle.net/中提供HTML的渲染视图?你也可以添加CSS,所以我们可以看看你在页面上看到的内容 – DaveDev 2010-09-24 21:29:40
哈哈,2年后,我在看这个,我只能重复达林提到的......“上帝的圣母” ...我在想什么? – Gallen 2013-01-03 20:25:27