2

問題を最も単純な形式に単純化しました。これが私のページに何も出力されないのはなぜですか?

@if(true){Html.Raw("<a>test</a>");}

編集

ただし、これは機能します。

@if ( true ) { <span>@Html.Raw( "<a>test</a>" )</span>}
4

2 に答える 2

3

Razorエンジンが、あなたが書いた最初のタイプのコードと「必要な場合」または「対処方法」を混同しているためだと思います。これを行うとうまくいきます:

@if(true){@Html.Raw("<a>test</a>");}

構文@の先頭にある に注意してください。これについては、スコット・ガスリーによる説明Htmlがあります。その要約は次のとおりです。

ただし、すべてのコンテンツ コンテナー ブロックがタグ要素タグで始まるわけではなく、Razor パーサーがコンテンツ ブロックを暗黙的に検出できないシナリオがあります。

Razor では、コード ブロック内で @: 文字シーケンスを使用して、コンテンツ行の開始を明示的に示すことができるようにすることで、この問題に対処しています。@: シーケンスは、後続のコンテンツ行をコンテンツ ブロックとして扱う必要があることを示します。

今、私はそれがあなたの特定の問題に当てはまると信じています。

于 2013-04-02T12:40:21.237 に答える
1
@if(true){Html.Raw("<a>test</a>");}

razor パーサーは、開始文字と終了文字または HTML 要素を読み取って終了するコードを推測するため、上記の行では html 出力が得られません。コードには if 条件内に html 要素が含まれていないため、コントローラーで行うのと同じように、パーサーはこれを式として評価します。

@if ( true ) { <span>@Html.Raw( "<a>test</a>" )</span>}

これ@Html.Rawは、span 要素の下にラップされているため機能します。

于 2013-04-02T12:41:38.773 に答える