19

次の MVC 4 Razor コードがあります。

@for (int i = 1; i <= 100; i++) {

    if (currentCol == 1) {
        Html.Raw("<div class=row>");
    @*Need to do this because can't have a open div within a if compiler doesnt like it *@
    } if (currentCol == maxCol) {
        Html.Raw("</div>");
    }
    currentCol++;
}

私は基本的に、if ステートメントの異なるパスにある開始タグと終了タグを使用して、すべての div クラス行の内容を条件付きで生成しようとしています。そのままの HTML を使用すると、コンパイラはそれを気に入らず、ブラケットが外れていると判断します。Html.Rawオンラインでの検索からの解決策のようですが、 を使用するHtml.Rawと、ソースを表示したときに div が表示されません。

誰が何が起こっているのか知っていますか?

4

3 に答える 3

39

Html.Raw呼び出しにプレフィックスを付けてみてください@:

@for (int i = 1; i <= 100; i++) 
{
    if (currentCol == 1) 
    {
        @Html.Raw("<div class=row>");
    } 
    if (currentCol == maxCol) 
    {
        @Html.Raw("</div>");
    }
    currentCol++;
}
于 2013-08-23T15:56:15.100 に答える
15

Razor は、HTML と C#/VB の構文ブロックに従います。これが、タグを分割する理由です。2 つの回避策:

1: 使用Html.Raw(これまでと同様)

if (condition){
  @Html.Raw(@"<div class=""row"">")
}else{
  @Html.Raw("</div>")
}

2: 特別な<text>...</text>タグを使用します。

if (condition){
  <text>
    <div class="row">
  </text>
}else{
  <text>
    </div>
  </text>
}

Razor パーサーへの@記号は、ある言語から別の言語への移行を行っていることを意味することに注意してください (HTML からコード、またはその逆であっても)。したがって、if(...)ブロック内にいて、Html.Raw実際に HTML を出力しているので、@.

于 2013-08-23T15:57:18.587 に答える
11

以下も使用できます。

if(condition){
 @:<div>
}

if(condition){
 @:</div>
}
于 2016-03-01T15:36:42.433 に答える