Razor生成破烂的html是否需要Html.Raw?

时间:2014-08-05 15:14:21

标签: html razor html-helper razor-2

给定一个动态网格模型,通过razor生成html,类似于:

@{ int blockCounter = 0;}

@foreach (var item in Model.Items)
{
    if (blockCounter++ % 3 == 0)
    {
    //ragged html open here, when needed
    }

    <div>..... </div>

    if (blockCounter % 3 == 0)
    {
    //ragged html close, when needed
    }

}

还有其他选择吗?
if (blockCounter++ % 3 == 0)
{
@Html.Raw(@"<div class=""row"">")
}

如果使用以下代码:

if (blockCounter++ % 3 == 0)
{
    <div class="row">
}

这会导致分析程序错误分析程序错误消息:foreach数据块缺少关闭&#34;}&#34;字符。确保你有匹配的&#34;}&#34;所有&#34; {&#34;这个区块内的字符,并没有&#34;}&#34;字符被解释为标记。

此解析器错误为false,因为注释掉不合适的html或将其插入原始块会消除错误。原始块是解决此问题的唯一方法吗?

1 个答案:

答案 0 :(得分:3)

您应该能够使用@:为代码块中的单行或&lt; text&gt;输出文本。多行标记

// single line
if (blockCounter++ % 3 == 0)
{
    @:<div class="row">
}

// multiline
if (blockCounter++ % 3 == 0)
{
    <text>
        <div class="row">
        <span>more output</span>
    </text>
}

可在此处找到其他语法参考... http://www.asp.net/web-pages/overview/getting-started/introducing-razor-syntax-(c)