Answers:
尝试这样:
if (somecondition) {
@:<div>
}
<text><div></text>
有效,但<text></div></text>
无效。
为了解释达林的答案,即像这样在HTML前面加上前缀:
@:<html>
@:在Razor中的意思是“将某些内容渲染为纯文本”
或者,您也可以使用它,它在您最初编写HTML时就输出HTML(也可以用来避免Razor在尝试输出HTML时进行自动HTML编码):
@Html.Raw("<html>")
(来自MS的HTML.Raw参考-http: //msdn.microsoft.com/zh-cn/library/gg568896 (v=vs.111 ) .aspx)
@:<a href="@link" class="@classNames">@text</a>
@Html.Raw()
- 请参阅相关的SO帖子
您可以创建一个自定义的MVC Helper方法。为此,您可以在名称空间中创建公共静态类MyRenderHelpers System.Web.Mvc.Html
并编写方法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)
您必须这样做的事实通常表明您的视图代码未正确分解。HTML的本质是具有平衡的或自封闭的标签(至少在HTML 4中,HTML 5似乎远离它了),而Razor依赖于这种假设。如果您要有条件地输入a,<div>
那么您还将在以后的某个地方输出</div>
。只需在您的if
陈述中添加一对即可:
@if(something) {
<div>
Other stuff
</div>
}
否则,您将得到像这里这样的怪异代码。
@:
或<text></text>
if (somecondition) { @:</div> }
<link>
标签。
<text><div></text>
- haacked.com/archive/2011/01/06/...