问题描述
|
我有一个名为_FooterMenu的displayTemplate,其中下面的动态页脚菜单已编码。
没什么要问的
有什么方法可以简化displayTemplate代码吗?
我应该使用HtmlHelper隐藏逻辑吗?
布局页面中的代码
@Html.displayForModel(\"_FooterMenu\")
// displayTemplate代码。
@model Homeviewmodel
@{var distMenu = Model.FooterMenu.Where(c => c.Title != null).Select(m => new {Title = m.Title}).distinct() ;}
@foreach (var i in distMenu)
{
<div class=\"linksarea\">
<h5>@i.Title</h5>
<ul>
@foreach (var item in Model.FooterMenu.FindAll(x => x.Title == i.Title))
{
<li>
@Html.ActionLink(@item.displayName,\"Page\",\"Home\",new { name = @item.UrlName },null)
</li>
}
</ul>
</div>
}
解决方法
我认为优化代码的关键是对页脚菜单项使用\“ GroupBy \”,这将减少2个ForEach循环的需要。我模拟了您的MVC应用,这是我想出的代码段:
@{
var distMenu = Model.FooterMenu.GroupBy(q => q.Title);
}
@foreach (var grp in distMenu)
{
<div class=\"linksArea\">
<h5>@grp.Key</h5>
<ul>
@foreach(var item in grp)
{
<li>
@Html.ActionLink(@item.DisplayName,\"Page\",\"Home\",new { name = @item.Url },null)
</li>
}
</ul>
</div>
}
希望这可以帮助。