2012-06-13 62 views
6

我已經聲明如下我們如何聲明局部變量並輸出其值?

@{ int i = 1; } 

可變現在,內部foreach循環我想在循環被處理,每次分配i的值;

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

但它不工作。

任何解決方案?

+0

什麼是不工作? – jrummell

回答

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`) 
    ... 
} 
+0

愛你的解決方案,它的工作。但問題是,如何從1開始遞增,因爲它是從0 –

+0

@DigitalAssets遞增值,這取決於您使用的解決方案。對於基於LINQ的方法,只需將其更改爲「Index = i + 1」而不是「Index = i」。對於前者,可以聲明一個新的變量inline,即'int j = i + 1',或者在'for'語句中聲明第二個變量'for(int i = 0,j = 1; i

+0

我這樣做,它的工作。愛你的答案。我認爲這是更專業的方式。我沒有文字來感謝你。 –

3

你沒有解釋了什麼不起作用,但是從你的代碼看來,「i」變量的值不是遞增的,而是你審查了「0 ++;」的輸出。

這是因爲在剃刀@符號的目的是

  1. 輸出
  2. 標識符,因此它輸出識別符「I」,然後用「++剩餘文本繼續; 」。

要達到什麼樣的,你顯然需要做的(只增加i的值),你必須把它們放在一個代碼塊,如下所示:

@{ i++; } 

但是,如果你想輸出我的遞增前值,那麼你應該把它包在一個表達式塊,如下所示:

@(i++)