2012-06-13 8 views
6

que han declarado una variable como esto¿Cómo podemos declarar la variable local y dar salida a su valor?

@{ int i = 1; } 

Ahora, en el interior del bucle foreach quiero asignar el valor de i cada vez que se procesa el bucle;

@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++; 
} 

pero no está funcionando.

¿Alguna solución?

+0

lo que no funciona? – jrummell

Respuesta

2

Si necesita acceso al índice, que tiene más sentido utilizar un bucle normal de for:

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

Como alternativa, se puede usar una expresión 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

ama tu solución y funcionó. Pero el problema es cómo empezar a incrementar desde 1 porque está incrementando los valores desde 0 –

+0

@DigitalAssets, eso depende de la solución que esté usando. Para el enfoque basado en LINQ, simplemente cámbielo a 'Index = i + 1' en lugar de' Index = i'. Para el anterior appraoch, declare una nueva variable en línea, es decir, 'int j = i + 1', o declare una segunda variable en su instrucción' for', 'for (int i = 0, j = 1; i

+0

hice esto, funcionó. Amo tu respuesta. Creo que es la forma más profesional. No tengo palabras para agradecerte. –

3

No tiene explica lo que no funciona, pero a partir de su código, parece que el valor de la variable "i" no se incrementa, en su lugar se ve una salida de "0 ++;".

Esto es porque el propósito del símbolo @ en la maquinilla de afeitar es

  1. a la salida
  2. identificadores, y por lo tanto emite el identificador "i" y luego continúa con el resto del texto de "++; ".

para lograr lo que aparentemente quiere hacer (sólo incrementará el valor de i), hay que encerrarlo en un bloque de código, de la siguiente manera:

@{ i++; } 

Sin embargo, si usted quiere salida el valor de i antes de incrementar, entonces usted debe envolver en un bloque de expresión, como en el siguiente:

@(i++) 
Cuestiones relacionadas