web-dev-qa-db-ja.com

Razorは閉じられていないHTMLタグを理解しません

RazorViewEngineを使用すると、次のことができます。

if (somecondition) {
     <div> some stuff </div>
}

しかし、私はこれを行うことができないようです(Razorは混乱します):

if (somecondition) {
    <div>
}

if (someothercondition) {
    </div>
}

HTMLの開始タグと終了タグを異なるコードブロックに配置する必要がある状況があります。これをRazorで実行するにはどうすればよいですか。

97
sydneyos

このようにしてみてください:

if (somecondition) {
    @:<div>
}
158
Darin Dimitrov

ダリンの答えを説明するために、つまり、次のように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

57
Chris Halcrow

カスタム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)
4
Thomas Hauser

これを行う必要があるという事実は、通常、ビューコードが正しくファクタリングされていないことを示しています。 HTMLの性質は、バランスのとれたタグまたは自己囲まれたタグ(少なくともHTML 4ではHTML 5はそれから傾いているようです)であり、Razorはその仮定に依存しています。条件付きで<div>その後、どこかで後で出力する</div>。 whoelペアをifステートメントに入れるだけです:

@if(something) {
    <div>
        Other stuff
    </div>
}

そうしないと、 here のような奇妙なコードになってしまいます。

3
marcind