剃刀不理解未封闭的HTML标签

用RazorViewEngine,我可以这样做:

if (somecondition) { <div> some stuff </div> } 

但我似乎无法做到这一点(剃刀弄糊涂):

 if (somecondition) { <div> } if (someothercondition) { </div> } 

我有一个情况,我需要把我的开始和结束html标签在不同的代码块 – 我怎么能在剃刀这样做?

尝试像这样:

 if (somecondition) { @:<div> } 

为了解释达林的答案,即像这样HTML的前缀:

 @:<html> 

@:在剃刀中的意思是“呈现纯文本的东西”

或者你可以使用这个,它会输出HTML,就像你直接写的那样(这也可以用来避免Razor在输出HTML时自动完成的HTML编码):

 @Html.Raw("<html>") 

(来自MS的Html.Raw引用 – http://msdn.microsoft.com/en-us/library/gg568896(v=vs.111).aspx )

你必须这样做的事实通常表明你的视图代码没有被正确地考虑。 HTML的本质是具有平衡的或自我封闭的标签(至less在HTML 4中,HTML 5似乎偏离了它),Razor依赖于这个假设。 如果你有条件地输出一个<div>那么你以后也会输出</div> 。 只要把你的if语句中的whoel对:

 @if(something) { <div> Other stuff </div> } 

否则,你会得到像这里怪异的代码。

你可以创build一个自定义的MVC Helper方法。 因为在命名空间System.Web.Mvc.Html创build一个公共静态类MyRenderHelpers,并编写一个Html方法。

 namespace System.Web.Mvc.Html { public static class MyRenderHelpers { public static MvcHtmlString Html(this HtmlHelper helper, string html, bool condition) { if (condition) return MvcHtmlString.Create(html); else return MvcHtmlString.Empty; } } } 

现在,您可以在剃刀视图中使用此扩展方法:

 @Html.Html("<div>", somecondition)