6

私はこのような変数を宣言しました

@{ int i = 1; }

ここで、ループ内foreachで、ループが処理されるたびに i の値を割り当てたいと考えています。

 @foreach (var line in Model.Cart.Lines)
 {
      <input type="hidden" name="item_name_@i" value="@line.Product.ProductName" />
      <input type="hidden" name="amount_@i" value="@line.Product.Price" />
      <input type="hidden" name="quantity_@i" value="@line.Quantity" />
      @i++;
 }

しかし、それは機能していません。

解決策はありますか?

4

3 に答える 3

3

何が機能していないかを説明していませんが、コードから、「i」変数の値が増加していないように見えます。代わりに、「0++;」の出力を調べます。

これは、剃刀の @ 記号の目的が

  1. 出力する
  2. したがって、識別子「i」を出力し、残りのテキスト「++;」を続行します。

明らかにやりたいこと (i の値を増やすだけ) を実現するには、次のようにコード ブロックで囲む必要があります。

@{ i++; }

ただし、インクリメントする前に i の値を出力したい場合は、次のように式ブロックでラップする必要があります。

@(i++)
于 2013-06-20T14:28:00.717 に答える
2

forインデックスにアクセスする必要がある場合は、通常のループを使用する方が理にかなっています。

@for (int i = 0; i < Model.Cart.Lines.Count; i++)
{
    var line = Model.Cart.Lines[i];
    ...
}

または、LINQ 式を使用することもできます。

@foreach (var item in Model.Cart.Lines.Select((x, i) => new { Line = x, Index = i }))
{
    // Now you can access, for example, `item.Line` for the line, and 
    // `item.Index` for the index (i.e. `i`)
    ...
}
于 2012-06-13T16:39:47.453 に答える