剃刀不理解未封闭的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)