Razor は、if 節に終了 div タグを入れるとエラーを出します。質問する

Razor は、if 節に終了 div タグを入れるとエラーを出します。質問する

私は Razor テンプレートを使用してこれを実行しようとしています:

@if(isNew)
{
   <div class="new">
}

...


@if(isNew)
{
   </div>
}

エラーは次のとおりです:

cannot resolve the symbol 'div'

Razor は IF 句内の終了 div タグを好みません。これを機能させるにはどうすればよいですか? 使用しなければならないエスケープはありますか?

ベストアンサー1

Razor は HTML を適切に解析できないため、開始タグと終了タグを次のように分割することを好みません。そのため、プレーン テキストとしてエスケープする必要があります。

@if(isNew)
{
   @:<div class="new">
}

...


@if(isNew)
{
   @:</div>
}    

より一般的なアプローチは、div 内でマークアップを繰り返すことです (部分的または他の方法を使用)。どちらのアプローチがより望ましいかは、条件付き div 間のマークアップの性質によって異なります。

@if(isNew)
{
    <div class="new">
        <!-- some markup or partial view -->
    </div>
}
else
{
    <!-- some markup or partial view -->
}

次のいずれかの場合、このアプローチをお勧めします。

  1. 含まれるマークアップは、他の場所で再利用できるように、部分的に有効に含めることができます。
  2. 条件付きラッピング マークアップは数行以上になり、その時点でエスケープ マークアップが乱雑になります。

ヘルパー メソッドを使用するオプションも追加する必要があります。

@helper MainMarkup()
{
    <!-- some markup or partial view -->
}

@if(isNew)
{
    <div class="new">
        @MainMarkup()
    </div>
}
else
{
    @MainMarkup()
}

これは、上記の 2 番目のオプションを使用したいが、マークアップを繰り返したり、あまり多くの部分をネストしたりしたくない場合 (特に、このマークアップがこのビューにのみ関連する場合) に便利です。

おすすめ記事