Mvc 3 Razor,viewpage中的文本块?

时间:2011-12-06 17:18:17

标签: c# asp.net-mvc-3 razor

我遇到了<text>标记的问题。由于底部附近的</tr>标记,以下代码无法运行。如果我删除它,它可以工作但它然后打印一个不正确的表。如果我离开它我会收到以下错误:遇到结束标记“tr”没有匹配的开始标记。您的开始/结束标签是否正确平衡?

我怎么能告诉剃刀忽略这些事情? (我还尝试在/ tr周围添加一个文本标签,并在所有html代码周围添加,但这会产生这样的结果:遇到结束标记“text”,没有匹配的开始标记。你的开始/结束标记是否正确平衡了?

@{                             
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 个答案:

答案 0 :(得分:1)

你可以这样做

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

或者您可以设置一个“保存”<tr>标记的扩展html的变量

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

    <tr@ext>
    // ...

这是最简单的解决方案,或者您可以创建自定义的html帮助程序。

更多信息:Creating Custom HTML Helpers

<强>更新

达林也说过,他会创建一个自定义的html助手。

我也建议,如果你需要不止一次。

<强>结论

首选是创建一个html帮助器,第二个是使用我的第一个 方法(内联if语句),最后使用变量。

它并不真正取决于你需要的“频率”,但如果你真的需要的话 只有一次,选择第一种方法。 三种解决方案中的每一种都是正确的,它取决于时间的决定 你有。

希望这有助于您

答案 1 :(得分:1)

<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()

答案 2 :(得分:1)

我使用javascript替代方法。由于您使用的是MVC3,因此您可能可以访问jQuery。添加这个javascript小块(See jsFiddle Example

$(function() {
    $('tr:odd').addClass('alternate-row');
})

答案 3 :(得分:0)

从条件

中的tr标记周围删除<text>