为什么剃刀不喜欢这个?
我有一个令人讨厌的大问题,我有一个观点:
@{ 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 { @: }
Interesting Posts
在MVC cshtml中每行显示三列
ModelMetaData,自定义类属性和难以形容的问题
如何使用method =“post”从表单中获取数据? 如何在我的控制器中请求数据?
循环引用和ScriptIgnore问题
将AjaxOnlyAttribute和ChildActionOnlyAttribute组合到一个动作filter中
ASP.NET MVC网格显示解决方案
ASP.NET-MVC3中“自我validation模型”中的客户端validation
无法在MVC 3,Visual Studio 2010中使用PagedList.Mvc
Orchard Custom Module – 由NHibernate选择的模型 – 需要虚拟属性
无法在global.asax / Application_Start中断