RazorViewEngineを使用すると、次のことができます。
if (somecondition) {
<div> some stuff </div>
}
しかし、私はこれを行うことができないようです(Razorは混乱します):
if (somecondition) {
<div>
}
if (someothercondition) {
</div>
}
HTMLの開始タグと終了タグを異なるコードブロックに配置する必要がある状況があります。これをRazorで実行するにはどうすればよいですか。
このようにしてみてください:
if (somecondition) {
@:<div>
}
ダリンの答えを説明するために、つまり、次のように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 )
カスタムMVCヘルパーメソッドを作成できます。を使用して、名前空間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)
これを行う必要があるという事実は、通常、ビューコードが正しくファクタリングされていないことを示しています。 HTMLの性質は、バランスのとれたタグまたは自己囲まれたタグ(少なくともHTML 4ではHTML 5はそれから傾いているようです)であり、Razorはその仮定に依存しています。条件付きで<div>
その後、どこかで後で出力する</div>
。 whoelペアをif
ステートメントに入れるだけです:
@if(something) {
<div>
Other stuff
</div>
}
そうしないと、 here のような奇妙なコードになってしまいます。