2011-09-23 7 views
30

Bene, questo è semplicemente imbarazzante. Non riesco nemmeno a capire un semplice incremento in una delle mie visualizzazioni in ASP.NET MVC3 (Razor). Ho fatto ricerche e sembra che la documentazione di Razor sia piuttosto scarsa. Ecco quello che ho provato e fallito miseramente:Semplice incremento di una variabile locale nelle viste in ASP.NET MVC3 (Razor)

@{ 
    var counter = 1; 

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

Ho anche provato @{counter++;} solo per calci e inutilmente =) Vi sarei grato se qualcuno potesse illuminarmi. Grazie!

risposta

58
@{ 
    int counter = 1; 

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

Spiegazione:

@{ 
// 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

Grazie. Ho provato entrambi. Il primo carica almeno la pagina ma il ciclo foreach non supera il primo ciclo che mi dice che qualcosa è andato storto con il contatore. Il secondo suggerimento porta a un errore di compilazione. –

+1

Hai provato a dichiarare il contatore come int? EDIT In realtà, è int quando viene assegnato ... –

+0

Sì, l'uso di 'contatore int' ha funzionato per me. Grazie per l'aiuto! =) –

16

non ho trovato la risposta qui è stato molto utile in C# - ecco un esempio di lavoro per chi viene a questa pagina cercando il C# esempio:

@{ 
int counter = 0; 
} 


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

Semplicemente, come siamo già in @foreach, non abbiamo bisogno di mettere l'incremento all'interno di qualsiasi @ {} valori.

2

Un altro approccio pulito sarebbe:

<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

Se tutto quello che dovete fare è mostrare la numerazione, una soluzione ancora più pulita è di incremento-e-ritorno in un colpo solo:

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

l'unica soluzione che ha funzionato per me – kobe

+1

idem. Penso che la chiave sia la parentesi attorno al contatore ++. –

1

Vedere il seguente codice per l'incremento di una variabile locale nelle viste in ASP.NET funziona bene per me provarlo.

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