Mvc 3 Razor, текстовый блок на странице просмотра? - PullRequest
0 голосов
/ 06 декабря 2011

У меня проблема с тегом <text>. Следующий код не будет работать из-за тега </tr> внизу. Если я удаляю его, он работает, но затем печатает неверную таблицу. Если я оставлю это, я получу следующую ошибку: Обнаружен конечный тег "tr" без соответствующего начального тега. Ваши начальные / конечные теги правильно сбалансированы?

Как я могу сказать бритве игнорировать такие вещи? (Я также попытался добавить текстовый тег вокруг / tr, а также вокруг всего HTML-кода, но это приводит к следующему: встречный конечный тег "текст" без соответствующего начального тега. Правильно ли сбалансированы ваши начальные / конечные теги?

@{                             
int i = 0;
foreach (var item in Model.Model)
{
    if (i % 2 == 0)
    {
        <text><tr class="alternate-row"></text>
    }
    else
    {
        <text><tr></text>
    }

        <td>
            <input type="checkbox" />
        </td>
        <td>
            @item.Firstname
        </td>
        <td>
            @item.Surname
        </td>
        <td>
            <a href="">george@mainevent.co.za</a>
        </td>
        <td class="options-width">
            <a href="" title="Edit" class="icon-1 info-tooltip"></a><a href="" title="Edit" class="icon-2 info-tooltip">
            </a><a href="" title="Edit" class="icon-3 info-tooltip"></a><a href="" title="Edit"
                class="icon-4 info-tooltip"></a><a href="" title="Edit" class="icon-5 info-tooltip">
                </a>
        </td>        
    </tr>

}      
}    

Обновление с другим вопросом

Почему Razor даже проверяет html-теги?

Ответы [ 4 ]

1 голос
/ 06 декабря 2011

У меня есть альтернативный подход для вас, используя JavaScript. Поскольку вы используете MVC3, вы, вероятно, имеете доступ к jQuery. Добавьте этот маленький кусочек javascript ( См. Пример jsFiddle )

$(function() {
    $('tr:odd').addClass('alternate-row');
})
1 голос
/ 06 декабря 2011

Вы можете сделать это

<tr@if (i % 2 == 0) { <text> class="alternate-row"</text> }>

или вы можете установить переменную, которая "хранит" ваш расширенный HTML-код для тега <tr>, как это

int i = 0;
foreach (var item in Model.Model)
{
    string ext = "";
    if (i % 2 == 0)
    {
        ext = " class=\"alternate-row\"";
    }

    <tr@ext>
    // ...

Это самое простое решение, или вы можете создать пользовательский помощник HTML.

Дополнительная информация: Создание пользовательских помощников HTML

Обновление

Дарин сказалКроме того, что он будет создавать пользовательский помощник HTML.

Я тоже советую, если вам это нужно более одного раза.

вывод

первый выбор - создание помощника html, второй -использовать мой первый подход (встроенный оператор if) и, наконец, использовать переменную.

На самом деле это не зависит от того, «как часто» вам это нужно, но если вам это действительно нужно только один раз, выберитеПервый подход.Каждое из трех решений правильное, ваше решение зависит от того, сколько у вас есть времени.

надеюсь, это поможет вам

1 голос
/ 06 декабря 2011
<tr@Html.Raw(i % 2 == 0 ? " class=\"alternate-row\"" : "")>
    ... some tds
</tr>

Но лично я написал бы собственный Html-помощник, чтобы избежать этого спагетти-кода и что-то вроде:

@using (Html.Tr(i))
{
    <td>
        <input type="checkbox" />
    </td>
    <td>
        @item.Firstname
    </td>    
    ...
}

Я бы также реорганизовал и избавился от цикла foreachи замените его простым вызовом шаблона отображения: @Html.DisplayForModel().

0 голосов
/ 06 декабря 2011

удалите блоки <text> вокруг тега tr в вашем условном

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