C# Razor在if子句中放置结束div标记时会抱怨
我正在尝试使用Razor模板来实现这一点: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
@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()
}