Palabra clave “foreach” inesperada después del carácter “@”

Tengo una vista parcial en razor de afeitar. Cuando lo ejecuto, aparece el siguiente error: parece que Razor se queda atrapada pensando que estoy escribiendo código en todas partes.

Palabra clave “foreach” inesperada después del carácter “@”. Una vez dentro del código, no es necesario que prefija construcciones como “foreach” con “@”

Aquí está mi vista:

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

Dentro de tu bloque de using , Razor espera fuente C #, no HTML.

Por lo tanto, debe escribir foreach sin un @ .

Dentro de una etiqueta HTML, Razor espera el marcado, por lo que usaría @ .

Por ejemplo:

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

Solo necesita un @ si desea poner el código donde espera el marcado, o si desea escribir en cualquier lugar.

Para colocar marcas no parecidas a tags donde espera el código, use @: o .

Solo quiero agregar a SLaks que el marcado no molesta en realidad la sección del código solo dentro del marcado, y tan pronto como se alcanza la etiqueta de cierre, se vuelve a la sección de marcado.

Y una vez dentro del marcado, es necesario que use el símbolo @ incluso después del código.

Digamos por ejemplo que tienes lo siguiente:

 @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 *@ } }