我遇到了<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标签?
答案 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>
块