c# - 递归地加速动态菜单的创建
问题描述
我有以下菜单结构
A
-B
-C
D
-E
--F
等等。A
有孩子B, C
,D
有孩子E
,E
还有孩子F
我创建了一种递归渲染菜单的方法。但由于某种原因(我不知道)它变得非常慢
A, D = parent nodes, with parent = null
这是我的程序
1.
获取所有 parent = null 的父节点,在本例中为 A 和 D。
2.
为他们每个人检查他们是否有孩子。
2.1
如果他们有孩子,请获取孩子并迭代他们1
2.2
如果他们没有孩子,只需打印它们,然后转到下一项。
我可以对此应用某种记忆吗?
这是C#代码
allMenus
是所有可能的菜单。
@helper renderTree(IEnumerable<Menu> menus, IEnumerable<Menu> allMenus)
{
foreach (var item in menus)
{
var result = item.MenuName;
//if has childs
if (allMenus.Where(m => m.ParentID == item.MenuID).Any())
{
<li class="treeview">
<a href="#">
<i class="@item.IconName"></i>
<span>
@{
@Html.Raw(result);
}
</span>
<i class="fa fa-angle-left pull-right"></i>
<ul class="treeview-menu">
@{
// get the childs
var childs = allMenus.Where(m => m.ParentID == item.MenuID);
@renderTree(childs, allMenus);
}
</ul>
</a>
</li>
}
else
{
<li>
<a href="@Url.Action(@item.ActionName, @item.ControllerName, new { area = @item.AreaName }, null)">
<i class="@item.IconName"></i>
<span>@Html.Raw(result)</span>
</a>
</li>
}
}
}
解决方案
推荐阅读
- python - 如何为python中的所有print()输出设置前缀?
- saml - SAML 2 - openSAML - 签名和加密断言
- python - Pandas:将两个系列连接到 Pandas DataFrame
- vue.js - 相当于 Vue 的 render 函数中的模板标签
- python - 更新 tf.while_loop 中索引处的张量
- machine-learning - 在机器学习中处理不平衡的数据?
- android - 无法在 Outlook Android 中设置收件人
- r - 在 R 中的最小值和最大值之间创建日期
- android - Android 签名构建 - 移动网络中无法访问 API
- python - 附加设置 2.10.0 时的 Dataflow SDK 2.7.0