2010-10-25 16 views
3

Quelqu'un peut-il expliquer le principe de fonctionnement de asp.Net ci-dessous?Comment est-il possible d'atteindre une variable à partir d'une expression de bloc de code différente de celle du bloc où la variable a été déclarée?

J'ai 2 expressions asp.Net de bloc de code séparées dans un balisage aspx, avec un contenu html entre (élément span dans l'exemple ci-dessous).

Dans le premier bloc de code, il y a "i" comme variable d'incrémentation pour la boucle pour.

Ensuite, le bloc de code est coupé avec un contenu html.

Et une autre expression de bloc de code est ouverte mais comme je le vois, je peux atteindre la variable "i" qui a été déclarée dans le bloc de code précédent. Donc, comment asp.net gère -compile-les morceaux d'expériences de blocs de code déclarés dans la marque? Vérifie-t-il les points-virgules et génère-t-il des méthodes anonymes qui aboutiront à de nombreux appels à Response.Write à la dernière place?

Merci,

<p> 
    <%for (int i = 0; i < 30; i++) 
    { 
     Response.Write("Some text here"); 

     %> 

    <span> ______________________________ </span> <%--So how this line is processed 
                by ASP.Net so that it is embedded 
                in the for loop as Response.Write 
                method's parameter?--%> 

    <% 
     Response.Write(i*(i+1)); 

     Response.Write("<br />"); 
    }%> 
</p> 
+1

Je vous recommande de compiler une page ASPX (il est compilé), puis utiliser un réflecteur pour jeter un coup d'oeil. Vous pouvez soit compiler avec aspnet_compiler.exe (réservation: nom similaire), ou simplement accéder à la page, puis essayez de le trouver dans les fichiers temporaires d'asp.net. Cela va expliquer beaucoup alors :) – Onkelborg

Répondre

0

La ligne que vous faites référence à est de ne pas utiliser l'appel Response.Write au-dessus. C'est simplement un texte intégré dans la page Web.

La balise <span> n'est pas un "invité" du code C#; le code C# est un invité de la page Web ASP (dont la balise <span> fait partie).

1

Vous confondez la portée du code C# avec le balisage ASPX intégré. Le bloc de code ACTUAL est entre les accolades {} indépendamment de ce qui est dans ce bloc de code, dans le cas ci-dessus le code HTML est toujours dans le bloc unique. Il suffit de regarder pour l'ouverture et la fermeture des accolades, ceux-ci définissent vos blocs de code, les signes% entrent et sortent du code HTML/C#.

+0

SO dans ce cas le reste -le contenu (comme élément ci-dessus) est tout transféré ro Response.Write («quel que soit le contenu dans le balisage»); pour autant que je comprenne. – pencilCake

+0

@burak ozdogan - Il serait instructif de réécrire la pièce entière comme une exécution de code unique sans interruption html. Ensuite, vous verriez la partie du code avec ' ___' évalue dans ce contexte en tant que 'Response.Write (" ___); 'Les blocs' <% 'ne sont pas des définitions de portée fonctionnelle –

+0

Eh bien, il tout est compilé en langage intermédiaire donc pas tout à fait le même que la création d'un chargement d'instructions Response.Write mais en théorie oui, le résultat final est le même. –