使用RazorViewEngine,我可以这样做:
if (somecondition) {
<div> some stuff </div>
}
但我似乎无法做到这一点(Razor感到困惑):
if (somecondition) {
<div>
}
if (someothercondition) {
</div>
}
我有一种情况需要将我的开始和结束html标签放在不同的代码块中 - 我怎样才能在Razor中执行此操作?
答案 0 :(得分:157)
试试这样:
if (somecondition) {
@:<div>
}
答案 1 :(得分:56)
解释Darin的答案,即为HTML加上这样的前缀:
@:<html>
@:在Razor中意味着“将内容呈现为纯文本”
或者您可以使用它,它会在您原始编写时输出HTML(这也可以用来避免Razor在您尝试输出HTML时执行的自动HTML编码):
@Html.Raw("<html>")
(来自MS的Html.Raw参考 - http://msdn.microsoft.com/en-us/library/gg568896(v=vs.111).aspx)
答案 2 :(得分:4)
您可以创建自定义MVC Helper方法。为此,您可以在命名空间System.Web.Mvc.Html
中创建公共静态类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)
答案 3 :(得分:3)
您必须执行此操作通常表示您的视图代码未正确分解。 HTML的本质是拥有平衡或自封闭的标签(至少在HTML 4中,HTML 5似乎倾向于它),Razor依赖于这个假设。如果你有条件地ouptut <div>
,那么你也会在某个地方输出</div>
。只需将问题对放在if
语句中:
@if(something) {
<div>
Other stuff
</div>
}
否则,您最终会得到奇怪的代码,例如here。