2011-09-23 6 views
30

Bueno, esto es embarazoso. Ni siquiera puedo imaginar un incremento simple en una de mis vistas en ASP.NET MVC3 (Razor). He hecho búsquedas y parece que la documentación para Razor es bastante escasa. Esto es lo que he intentado y fracasado estrepitosamente:Incremento simple de una variable local en vistas en ASP.NET MVC3 (Razor)

@{ 
    var counter = 1; 

    foreach (var item in Model.Stuff) { 
     ... some code ... 
     @{counter = counter + 1;} 
    } 
} 

también he intentado @{counter++;} sólo por diversión y en vano =) Le agradecería que si alguien podría iluminar. ¡Gracias!

Respuesta

58
@{ 
    int counter = 1; 

    foreach (var item in Model.Stuff) { 
     ... some code ... 
     counter = counter + 1; 
    } 
} 

Explicación:

@{ 
// csharp code block 
// everything in here is code, don't have to use @ 
int counter = 1; 
} 

@foreach(var item in collection){ 
    <div> - **EDIT** - html tag is necessary for razor to stop parsing c# 
    razor automaticaly recognize this as html <br/> 
    this is rendered for each element in collection <br/> 
    value of property: @item.Property <br/> 
    value of counter: @counter++ 
    </div> 
} 
this is outside foreach 
+0

Gracias. He intentado ambos. El primero, al menos, carga la página, pero el ciclo foreach no supera el primer ciclo y me dice que algo salió mal en el contador. La segunda sugerencia conduce a un error de compilación. –

+1

¿Intentó declarar el contador como int? EDITAR Realmente, es int cuando se le asigna ... –

+0

Sí, usar 'int counter' funcionó para mí. ¡Gracias por la ayuda! =) –

16

no he encontrado la respuesta en este caso fue muy útil en C# - así que aquí está un ejemplo de trabajo para cualquiera que venga a esta página buscando el ejemplo de C#:

@{ 
int counter = 0; 
} 


@foreach(Object obj in OtherObject) 
{ 
    // do stuff 
    <p>hello world</p> 
    counter++; 
} 

Simplemente, como ya estamos en el @foreach, no necesitamos poner el incremento dentro de los valores @ {}.

2

Otro enfoque limpio sería:

<div> 
@{int counter = 1; 
foreach (var item in Model) 
{ 
    <label>@counter</label> 
    &nbsp; 
    @Html.ActionLink(item.title, "View", new { id = item.id }) 
    counter++; 
} 
} 
</div> 
7

Si todo lo que necesita hacer es mostrar la numeración, una solución aún mejor es la subasta y vuelta de una sola vez:

@{ 
    var counter = 0; 
} 
<section> 
    @foreach(var hat in Ring){ 
     <p> Hat no. @(++counter) </p> 
    }   
</section> 
+0

la única solución que funcionó para mí – kobe

+1

Ídem. Creo que la clave es el paréntesis alrededor del contador ++. –

1

Vea el siguiente código para el incremento de una variable local en vistas en ASP.NET, funciona bien para mí, pruébelo.

var i = 0; 
@foreach (var data in Model) 
{ 
    i++; 
    <th scope="row"> 
      @i 
    </th>.... 
}... 
Cuestiones relacionadas