Question sur le code imbriqué bloc de déclarations de Rasoir

J'ai récemment mis à jour un projet de MVC 1 à MVC 3 et maintenant je suis en train de Rasoir.

Dans un point de Vue, j'ai un foreach bloc de code, mais le imbriquée si l'instruction ne semble pas vouloir le @ devant elle.

Mon code d'origine était:

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

Je vais obtenir une erreur d'exécution avec @si qui dit: Des "si" mot-clé après le caractère"@". Une fois à l'intérieur du code, vous n'avez pas besoin de préfixe des constructions comme les "si" par "@".

Si je supprime le @ le code fonctionne très bien. J'ai besoin de l' @ en raison de l'HTML qui précède. Ce qui me confond plus, c'est que je n'ai besoin de l' @ avant le foreach imbriquée. Quelles sont les règles en jeu ici?

Il y a une question similaire ici, mais je ne suis toujours pas clair sur la différence entre le @si et @foreach. stackoverflow.com/questions/4946334/...

OriginalL'auteur Mattio | 2011-05-23