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标签?
您可以执行此
<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>
块