2012-06-25 25 views
8

Ho questo codice (nidificato all'interno un post modulo), ma sono continuamente ottenendo l'errore che manca la chiusura }MVC Razor ciclo for

@for(int i=0;i< itemsCount; i++){ 
    <input type="hidden" @string.Format("name= item_name_{0} value= {1}",i,items[i].Description) > 
    <input type="hidden" @string.Format("name= item_name_{0} value= {1}",i,items[i].UnitPrice.ToString("c"))> 
} 

sto fissando abbastanza a lungo .. . Qualcuno può aiutarmi?

+2

non credo questo frammento ha un problema. Mostra senza errori sulla mia macchina. Forse hai un extra '{' da qualche altra parte nel codice. – gideon

risposta

10

Prova mettere @: prima del tuo codice HTML simile a questo:

@for(int i=0;i< itemsCount; i++) 
{ 
    @: html code here 
} 

Alternative: 1. avvolgere il codice html con <text></text> 2. Uso HtmlHelper per generare il codice html

0

Oppure si può usare l'aiutante Html.Raw

@for(int i=0; i < itemsCount; i++) 
{ 
    <input type="hidden" @Html.Raw(string.Format("name= item_name_{0} value= {1}",i,items[i].Description)) /> 
    <input type="hidden" @Html.Raw(@string.Format("name= item_name_{0} value= {1}",i,items[i].UnitPrice.ToString("c"))) /> 
} 
0

provare:

@for (int i = 0; i < itemsCount; i++) { 
    <input type="hidden" name="@("item_name_" + i)" value="@items[i].Description" /> 
    <input type="hidden" name="@("item_name_" + i)" value="@(items[i].UnitPrice.ToString("c"))" /> 
} 

nota la modifiche/note in Prashanth di un altro pure.

1

Il modo più semplice è utilizzare gli helper HTML. Codice sarà pulita come pure (il formato di nome per la descrizione e PrezzoUnitario sembra seguire lo stesso formato, si può decidere di cambiarlo)

@for (int i = 0; i < itemsCount; i++) 
    { 
     @Html.Hidden(string.Concat("ïtem_name_", i), items[i].Description) 
     @Html.Hidden(string.Concat("ïtem_name_", i), items[i].UnitPrice.ToString("c"))   
    } 
2

si può notare che per la scrittura di un blocco di codice è possibile scrivere in due modi

  1. Per Solo una linea di blocco, proprio come hai scritto nel codice e questo racchiude solo il riga che contiene il precedente @
  2. Per il blocco di codice utilizzando @ {...}, questo consente a freedon di utilizzare il codice senza precedente @ eccetto all'interno di espressioni HTML. Per qualsiasi html/testo è necessario precederlo con @: si desidera stampa come è, altrimenti Razor proverà a interpretarlo come codice (Poiché @: definisce il contenuto come letterale per ogni espressione codice sotto @: è necessario utilizzare @ di nuovo per il codice)

Nel tuo caso si può fare come segue

@{ 
    for(int i=0; i < itemsCount; i++) 
    { 
     @:<input type="hidden" @Html.Raw(string.Format("name= item_name_{0} value= {1}",i,items[i].Description)) /> 
     @:<input type="hidden" @Html.Raw(@string.Format("name= item_name_{0} value= {1}",i,items[i].UnitPrice.ToString("c"))) /> 
    } 
}