Код DisplayTemplate необходимо исправить / обратная связь - PullRequest
1 голос
/ 30 мая 2011

У меня есть DisplayTemplate с именем _FooterMenu, в котором закодировано динамическое меню нижнего колонтитула.

Несколько вопросов, которые нужно спросить

Есть ли способ упростить код 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>
}   

1 Ответ

1 голос
/ 01 июня 2011

Я думаю, что ключом к оптимизации вашего кода является использование «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>
    }

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...