为什么剃刀不喜欢这个?

我有一个令人讨厌的大问题,我有一个观点:

@{ if(ViewBag.Section == "Home") { 
} else {

我收到编译错误:

代码块缺少结束“}”字符。 确保此块中的所有“{”字符都有匹配的“}”字符,并且没有任何“}”字符被解释为标记。

我如何有条件地写一个div? 它的基础是hack …

我怀疑这是因为你的div没有关闭,所以剃刀假设结束括号实际上是div内容的一部分。

您可以尝试在那里输出代码中的整个div内容,包括结束标记,或者输出带有Response.Write或类似内容的div标记,这样就没有令人困惑的标记。

编辑:也可以将你的div标签括在一个

  

也许值得尝试一下。

在包装div的内部元素时,可以使用相同的构造,如:

 @if (ViewBag.Section == "Home") { 
} else { }

或者你使用razor语法@:喜欢

 @if (ViewBag.Section == "Home") { @:
} else { @:

但对于你目前的情况,我更喜欢Ron Sijm的解决方案:

 @{ var divName = ViewBag.Section == "Home" ? "headerfrontPage" : "header"; } 

你可以试试这个:

 @{ string divName; if(ViewBag.Section == "Home") { divName = "headerfrontPage"; } else { divName = "header"; } } 

我不确定这是否会有所帮助,这是一个很长的镜头。 但至少imo看起来更好……

试试这个:

 @if (ViewBag.Section == "Home") {  
} else { }

最简单的方法是:

 

或者,如果您愿意,可以使用局部变量:

 @{ var headerID = ViewBag.Section == "Home" ? "headerFrontPage" : "header"; } 

关于Razor代码块中未封闭标签的更一般情况,您可以将开始标记明确标记为内容 :

 @if (ViewBag.Section == "Home") { @:
} else { @: