Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Razor在if子句中放置结束div标记时会抱怨_C#_Asp.net Mvc_Razor - Fatal编程技术网

C# Razor在if子句中放置结束div标记时会抱怨

C# Razor在if子句中放置结束div标记时会抱怨,c#,asp.net-mvc,razor,C#,Asp.net Mvc,Razor,我正在尝试使用Razor模板来实现这一点: @if(isNew) { <div class="new"> } ... @if(isNew) { </div> } Razor不喜欢IF子句中的结束div标记,我如何才能让它工作?我必须使用转义吗?Razor不喜欢这样拆分开始/结束标记,因为它无法正确解析HTML,所以必须将它们转义为纯文本: @if(isNew) { @:<div class="new"> } ... @if(is

我正在尝试使用Razor模板来实现这一点:

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

...


@if(isNew)
{
   </div>
}

Razor不喜欢IF子句中的结束div标记,我如何才能让它工作?我必须使用转义吗?

Razor不喜欢这样拆分开始/结束标记,因为它无法正确解析HTML,所以必须将它们转义为纯文本:

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

...


@if(isNew)
{
   @:</div>
}    
@if(isNew)
{
@:
}
...
@如果(是新的)
{
@:
}    
更传统的方法是在div内重复标记(使用partials或其他方法)——我认为哪种方法更可取取决于条件div之间标记的性质:

@if(isNew)
{
    <div class="new">
        <!-- some markup or partial view -->
    </div>
}
else
{
    <!-- some markup or partial view -->
}
@if(isNew)
{
}
其他的
{
}
我更喜欢这种方法,如果:

  • 包含的标记可以有效地包含在分部中,以便在其他地方重用
  • 条件包装标记不止几行,此时转义标记变得混乱
  • 我还应该添加使用助手方法的选项:

    @helper MainMarkup()
    {
        <!-- some markup or partial view -->
    }
    
    @if(isNew)
    {
        <div class="new">
            @MainMarkup()
        </div>
    }
    else
    {
        @MainMarkup()
    }
    
    @helper MainMarkup()
    {
    }
    @如果(是新的)
    {
    @main标记()
    }
    其他的
    {
    @main标记()
    }
    

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

    我也遇到了此问题,但后来我意识到,从逻辑上讲,我确实做了一些错误的事情。虽然这是可行的,但我认为这不是一个好办法+1无论如何,对于解决方案。@Silvermind True,如果您有无效的HTML,则会发生这种情况,但如果您执行上述操作并在其他标记周围插入条件容器,也会发生这种情况。另一种方法是重复内部标记,这并不总是方便(甚至不整洁),即使使用partials。也是,但是如果调用PartialView/UserControl真的必须重复一行代码的话,我宁愿重复一行代码,也不愿把它弄得一团糟。@Silvermind这是个难题——对于这样的一行代码,我想说使用partials可能只是不必要的抽象;如果包装标记更复杂(或者使用分部还有其他好处,可重用性),我会同意你的观点。这是我的观点——如果中间有很多标记,你不希望它重复,将其抽象为分部(当然,这取决于它是什么)可能没有语义意义。如果是这样的话,我更愿意直接转义容器,而不是重复内部标记或将其包装成部分标记。
    @helper MainMarkup()
    {
        <!-- some markup or partial view -->
    }
    
    @if(isNew)
    {
        <div class="new">
            @MainMarkup()
        </div>
    }
    else
    {
        @MainMarkup()
    }