4

私の見解では、Razorは、Foreachループに終了中括弧がないことを通知しています(})。また<div class="row">、終了タグが欠落していることも通知しています。

 @{int spanCounter = 0;}
 @foreach (var item in Model)
 {
     if(spanCounter == 0)
     {
        <div class="row">
     }
     spanCounter += item.Span;

     <div class="span@(item.Span)">
       @item.Html
     </div>

     @if(spanCounter == 12)
     {
       @spanCounter = 0

       </div>
     }    
 }

私は同様の質問を見ましたが、彼らはRazorが適切に階層化されていることを期待しているという事実に焦点を合わせているようです。つまり、これは違法です。

if(condition)
{
    <foo>
}
else
{
    <foo>
}
</foo>

UPDATE モデルは、HTMLコンテンツの「ブロック」のリストです。

もう少し明確にするために、 「行」に複数のブロック( <div></div>)を書きたい<div></div>

  1. spanCounterが0BEGIN行の場合。
  2. コンテンツの書き込み:<div></div>最大スパン幅に達するまでブロックします(12)
  3. 行を終了し、カウンターをリセットし、1に戻ります。
4

4 に答える 4

4

コードの繰り返しを回避する別の回避策があります。

if(condition)
{
    @:<foo>
}
else
{
    @:<foo>
}
</foo>
于 2013-12-15T10:32:51.520 に答える
2

このように交換してください

@{int spanCounter = 0;}
@foreach (var item in Model)
{
  if (spanCounter == 0 || spanCounter == 12)
  {
  <div class="row">
  @spanCounter += @item.Span;
  <div class="span@(item.Span)">
      @item.Html
  </div>
  </div>
  }
  else
  {
    spanCounter += item.Span;
  <div class="span(@item.Span)">
  @item.Html
  </div>
  }
}
于 2012-09-03T08:32:44.683 に答える
1

これはコード自体には対応していませんが、Razorと閉じ中括弧との混同に関連しているため、誰かが私のように本当に困惑した場合に備えて、ここに配置します。VS 2012で、Razorは混乱し、私はついにこのようなコメントでアポストロフィを絞り込みました。閉じ中括弧が黄色ではないことに注意してください。

ここに画像の説明を入力してください

ただし、コメントからアポストロフィを省略した場合は、正常に機能します。

ここに画像の説明を入力してください

于 2016-03-09T01:51:38.003 に答える
0

このエラーが発生した理由は、終了タグが条件付きでレンダリングされていたため、ビューに追加されることを保証できなかったためです。

spanCounter変数はここでインクリメントされています:

    spanCounter += item.Span;

    <div class="span@(item.Span)">
       @item.Html
    </div>

したがって、このifステートメントの条件を満たすことを保証することはできません。つまり、この時点で12より大きくなる可能性があります。

    @if(spanCounter == 12)
    {
       </div>
    }    

条件付きでレンダリングされる要素には、完全なマークアップを提供する必要があります。次のようなものが必要です。

var spanCounter = 0;
<div class="row">

@foreach (var item in Model)
{
    spanCounter += item.Span;
    <div class="span@(item.Span)">
        @item.Html
    </div>
   if(spanCounter == 12)
   {
       spanCounter = 0;
   }
}

</div>
于 2012-09-03T08:41:23.163 に答える