当我在if子句中放入一个结束div标签时,Razor会抱怨

时间:2013-12-02 21:35:01

标签: c# asp.net-mvc razor

我正在尝试使用Razor模板:

@if(isNew)
{
   <div class="new">
}

...


@if(isNew)
{
   </div>
}

错误是:

cannot resolve the symbol 'div'

Razor不喜欢IF子句中的结尾div标签,我怎样才能使它工作?我必须使用逃脱吗?

1 个答案:

答案 0 :(得分:37)

当您将开始/结束标记分割为这样时,Razor不喜欢它,因为它无法正确解析HTML,因此您必须将它们作为纯文本转义:

@if(isNew)
{
   @:<div class="new">
}

...


@if(isNew)
{
   @:</div>
}    

更传统的方法是重复div中的标记(使用partials或其他方式) - 我认为哪种方法更可取,取决于条件div之间标记的性质:

@if(isNew)
{
    <div class="new">
        <!-- some markup or partial view -->
    </div>
}
else
{
    <!-- some markup or partial view -->
}

如果有的话,我更喜欢这种方法:

  1. 包含的标记可以有用地包含在部分中,以便可以在其他地方重复使用。
  2. 条件换行标记超过几行,此时转义标记变得混乱。
  3. 我还应该添加使用辅助方法的选项:

    @helper MainMarkup()
    {
        <!-- some markup or partial view -->
    }
    
    @if(isNew)
    {
        <div class="new">
            @MainMarkup()
        </div>
    }
    else
    {
        @MainMarkup()
    }
    

    如果您想使用上面的第二个选项但是避免重复标记或嵌套过多的部分(特别是如果此标记仅与此视图相关),这将非常有用。