Parola chiave “foreach” imprevista dopo il carattere “@”

Ho una visione parziale fatta con il razor. Quando lo eseguo ottengo il seguente errore: sembra che Razor rimanga bloccato nel pensare che sto scrivendo il codice ovunque.

Parola chiave “foreach” imprevista dopo il carattere “@”. Una volta all’interno del codice, non è necessario prefisso di costrutti come “foreach” con “@”

Ecco la mia opinione:

@model IEnumerable 
@using(Html.BeginForm("Update", "UserManagement", FormMethod.Post)) { @Html.Hidden("UserId", ViewBag.UserId) @foreach(var link in Model) { if(link.Linked) { @link.Description
} else { @link.Description
} } }

All’interno del tuo blocco using , Razor è in attesa di sorgente C #, non HTML.

Pertanto, dovresti scrivere foreach senza un @ .

All’interno di un tag HTML, Razor si aspetta un markup, quindi useresti @ .

Per esempio:

 
@if (x) { //Code goes here if (y) { //More code goes here
@if (z) { }
} }

Hai solo bisogno di un @ se vuoi inserire il codice dove è previsto il markup, o se vuoi scrivere l’output ovunque.

Per inserire un markup non tag in cui è previsto il codice, usa @: o .

Voglio solo aggiungere alla risposta di SLaks che il markup in realtà non disturba la sezione del codice solo all’interno del markup, e non appena viene raggiunto il tag di chiusura, torna alla sezione markup.

E simile è una volta all’interno del markup, è necessario utilizzare il simbolo @ anche dopo il codice.

Supponiamo ad esempio di avere il seguente:

 @if(true) {  Markup section here, you need to include the @symbol @if(1 = 1) { } @if(2 = 2) @* The @ symbol here is required *@ { }  @: Code section back here, to output you need the "@:" symbol to display markup, although it is after the markup if(false) @* Here the @ symbol isn't required *@ { some_statment; @* This will not be sent to the browser *@ @display_someStament @* If we want to send it to the browser, then we need the @ symbol even in the code section *@ } }