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


99

RazorViewEngineで、これを行うことができます:

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

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

if (somecondition) {
    <div>
}

if (someothercondition) {
    </div>
}

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

回答:


161

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

if (somecondition) {
    @:<div>
}

1
または<text><div></text>- haacked.com/archive/2011/01/06/...
Simon_Weaver

17
<text><div></text>動作しますが、<text></div></text>動作しません。
friggle 2013

@Stuntmanを使用するには、開始タグと終了タグの両方でこれを実行する必要があります。
デパルタメントB

そして、マルチラインテキストをどのように扱うのですか?
Dmitri Tsoy 2016年

これをインラインで行うことはできませんでした。if(condition){@:tag}。上記のようにフォーマットする必要がありました。
Mike

59

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


2
ソリューションは素晴らしいですが、説明は非常に貴重です。ありがとう!
ジェイ

2
@ Html.Raw( "<html>")ソリューションをお勧めします。自動フォーマット(ctrl + K ctrl + D)を使用すると、最初のものが複数行で分割されたためです
Matteo Sganzetta

@MatteoSganzettaトゥルー何を出力していることはカミソリの変数は、例えば、それに振りかけていない限り、:@:<a href="@link" class="@classNames">@text</a>
qJake


4

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

3

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

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

そうでなければ、あなたはここのような奇妙なコードになってしまいます


6
私の状況は、私がしたいことです
シドニー

そうです、私のポイントは、99%のケースではおそらくそうすべきではないということです。しかし、あなたはその場合にはそこだと1%に収まるかもしれません@:<text></text>
marcind

7
彼はおそらく後でクロージングブロックを持っています:if (somecondition) { @:</div> }
Simon_Weaver

はい、彼はする必要があります。私のポイントは、そのようなビューをリファクタリングできるので、そのような二重の条件は必要ないということです。
11

1
@michielvooたとえば、このメソッドを使用して条件付きdivラッパーを設定するのはなぜ悪いのでしょうか。また、HTML5では<link>タグを閉じません。
Chris Haines
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.