Застрял с синтаксисом бритвы ASP.NET MVC - PullRequest
0 голосов
/ 19 ноября 2011

Создание быстрого представления, которое будет отображать список всех дней, но отображать заголовок только при изменении дня недели. Почему я получаю синтаксическую ошибку по foreach? Любая помощь будет принята с благодарностью!

@{
    int lastDay = 0; 
}
@foreach (var grouping in Model.EventTemplate.EventTemplateSlots) {
    if (grouping.Day != lastDay) {
        if (lastDay != 0) {
            </div>
        }
        <div style="margin: 5px;"><div class="ui-widget-header ui-corner-all" style="padding: 5px;">@(((DateTime)Model.StartDate).AddDays(grouping.Day).ToShortDateString())</div>
        lastDay = grouping.Day;
    }
}

Ответы [ 3 ]

2 голосов
/ 19 ноября 2011

Бритва не работает таким образом. Элементы HTML не могут быть отделены, как у вас есть. У вас есть голый </div>:

if (lastDay != 0) {
    </div>
}

Это недопустимо, поскольку теги HTML должны совпадать аналогично скобкам C # (они должны находиться на одном уровне вложенности, а конечный тег не может отображаться лексически перед начальным тегом). Мне непонятно, почему вы используете этот lastDay чек. Почему бы не написать это без этого, как это вместо этого?

@foreach (var grouping in Model.EventTemplate.EventTemplateSlots) {
    if (grouping.Day != lastDay) {
        <div style="margin: 5px;">
            <div class="ui-widget-header ui-corner-all" style="padding: 5px;">@(((DateTime)Model.StartDate).AddDays(grouping.Day).ToShortDateString())</div>
        </div>
    }
}

Таким образом, теги начала / конца HTML совпадают так, как нужно.

0 голосов
/ 19 ноября 2011

Это должно работать:

@{ 
    int lastDay = 0;  

    <div style="margin: 5px;">
        @foreach (var grouping in Model.EventTemplateSlots)
        {
            if (grouping.Day != lastDay)
            { 
            <div class="ui-widget-header ui-corner-all" style="padding: 5px;">
                @(((DateTime)Model.StartDate).AddDays(grouping.Day).ToShortDateString())
            </div>
                lastDay = grouping.Day;
            }
        }
    </div> 
}

Razor предпочитает, чтобы HTML-теги соответствовали правильно для анализа представления.

Также обратите внимание, что в вашем примере вы никогда не получите закрывающий тег div, если у вас нет повторного дня в вашей коллекции EventTemplateSlots.

0 голосов
/ 19 ноября 2011

Ваша модель реализует IEnumerable? Если нет, вы не сможете повторить его в цикле foreach.

Какую ошибку вы видите? Пожалуйста, напишите это в вашем вопросе.

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