Recientemente actualicé un proyecto de MVC 1 a MVC 3 y ahora estoy probando Razor.Pregunta sobre las declaraciones de bloque de código anidado en Razor
En una vista, tengo un bloque de código foreach, pero la declaración if anidada no parece querer la @ delante de ella.
Mi código original:
@foreach(var r in Model.Results)
{
string css = r.Result.Count() > 0 ? "fail" : "pass";
<p class="@css"><strong>@r.Description</strong></p>
@if(r.Result.Count() > 0)
{
<p>Count: @r.Result.Count()</p>
<table>
<thead>
<tr>
<th>ID</th><th>Title</th><th>Description</th>
</tr>
</thead>
<tbody>
@foreach(var e in r.Result) {
<tr><td>@e.Id</td><td>@e.Title</td><td>@e.Description</td></tr>
}
</tbody>
</table>
}
}
Voy a buscar un error de ejecución con @if que dice: Inesperado "si" después de la palabra clave de carácter "@". Una vez dentro del código, no es necesario que prefija construcciones como "si" con "@".
Si elimino @ el código funciona bien. Esperaba necesitar el @ debido al HTML que lo precede inmediatamente. Lo que me confunde más es que necesito el @ antes del foreach anidado. ¿Cuáles son las reglas en juego aquí?
Hay una pregunta similar aquí, pero todavía no tengo clara la diferencia entre @if y @foreach. http://stackoverflow.com/questions/4946334/razor-unexpected-foreach-keyword-after-character – Mattio