Mvc 3 Razor,查看页面中的文本块

本文关键字:文本 Razor Mvc | 更新日期: 2023-09-27 18:17:01

我的<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标签?

Mvc 3 Razor,查看页面中的文本块

您可以执行此

<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助手。

更多信息:创建自定义HTML帮助

更新

Darin也说过,他将创建一个自定义的html助手。

如果你不止一次需要的话,我也建议你这样做。

结论

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

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

希望这能帮助您

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

我有一种使用javascript的替代方法。由于您使用的是MVC3,因此您可能可以访问jQuery。添加这个javascript小金块(参见jsFiddle示例(

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

从条件中的tr标记周围移除<text>