回答:
このようにしてみてください:
if (somecondition) {
@:<div>
}
<text><div></text>
動作しますが、<text></div></text>
動作しません。
Darinの答えを説明するには、つまり、次のようにHTMLのプレフィックスを付けます。
@:<html>
@:Razorで「何かをプレーンテキストとしてレンダリングする」という意味
または、これを使用して、最初に記述したとおりにHTMLを出力することもできます(これは、HTMLを出力しようとしている場合にRazorが行う自動HTMLエンコーディングを回避するためにも使用できます)。
@Html.Raw("<html>")
(MSからHtml.Raw参照- http://msdn.microsoft.com/en-us/library/gg568896(v=vs.111).aspx)
@:<a href="@link" class="@classNames">@text</a>
カスタムMVCヘルパーメソッドを作成できます。名前空間にパブリック静的クラス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はその仮定に依存します。条件付きで出力する<div>
場合は、後でどこかで出力します</div>
。if
ステートメントにwhoelペアを入れてください:
@if(something) {
<div>
Other stuff
</div>
}
@:
か<text></text>
if (somecondition) { @:</div> }
<link>
タグを閉じません。
<text><div></text>
- haacked.com/archive/2011/01/06/...