Blocs de code dans ASP.NET
Le modèle de page à fichier unique ASP.NET est semblable à la structure de page ASP (Active Server Pages) en cela que les blocs de script contenant le code sont placés avant le code HTML et qu'il est possible d'utiliser des instructions de balisage spéciales dans le code HTML. Cette rubrique décrit les problèmes associés à la mise à jour du code ASP vers ASP.NET.
Le modèle de page code-behind d'ASP.NET sépare le code des blocs de script du code HTML et des instructions de balisage ASP.NET. Pour plus d'informations, consultez Modèle de code des pages Web ASP.NET.
Déclaration des variables et des procédures
Toutes les procédures et les variables globales ASP.NET doivent être déclarées dans des blocs <script runat="server"> placés avant la balise <html>, et non entre des séparateurs de style <%...% > ASP. Vous pouvez quand même déclarer des variables dans des blocs de rendu <%...%> mais celles-ci ne seront accessibles qu'aux autres blocs de rendu sur la page, pas à d'autres fonctions ou procédures de manière globale. Une page peut contenir plusieurs blocs <script> mais le langage de programmation doit être le même dans tous les blocs de la page.
L'exemple de code suivant illustre une page ASP.NET qui déclare des variables et des procédures dans un bloc de rendu et de script. Si vous passez une chaîne de requête à la page ASP.NET dans l'URL, la chaîne de requête est affichée dans la page.
<%@ Page Language="VB" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
' The following variables are visible to all procedures
' within the <script> block.
Dim str As String
Dim i, i2 As Integer
Function DoubleIt(ByVal inpt As Integer) As Integer
' The following variable is visible only within
' the DoubleIt procedure.
Dim factor As Integer = 2
DoubleIt = inpt * factor
End Function
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<%
' The following local variable is visible only within this
' and other render blocks on the page.
Dim myVar
myVar = Request.QueryString
Response.Write("The querystring is " _
& Server.HtmlEncode(myVar.ToString()))
%>
</div>
</form>
</body>
</html>
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
// The following variables are visible to all procedures
// within the <script> block.
String str;
int i;
int i2;
int DoubleIt(int inpt)
{
// The following variable is visible only within
// the DoubleIt procedure.
int factor = 2;
return inpt * factor;
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<%
// The following local variable is visible only within this
// and other render blocks on the page.
object myVar;
myVar = Request.QueryString;
Response.Write("The querystring is " +
Server.HtmlEncode(myVar.ToString()));
%>
</div>
</form>
</body>
</html>
Rendu de texte
Les fonctions de rendu ne sont pas prises en charge dans ASP.NET. À l'aide des versions antérieures de ASP, vous pouvez insérer du code HTML littéral au sein d'une procédure comme le montre l'exemple de code suivant :
<% Sub SomeProcedure() %>
<H3> Render this line of bold text. </H3>
<% End Sub %>
Ce code génère une erreur dans une page ASP.NET. Pour ASP.NET, vous devez écrire le code comme suit.
<script runat=server>
Sub SomeProcedure()
Response.Write("<H3> Render this line in bold text.</H3>")
End Sub
</script>
Tout le code inclus entre les balises <script>…</script>
, à l'exception des déclarations de variables globales, doit être encapsulé dans des procédures.
Traitement, chargement et déchargement de page
Avec ASP, le code était inséré entre les balises <%...%> et le traitement de page démarrait avec la première instruction suivant la première balise <%>. Avec ASP.NET, tout code devant faire l'objet d'un traitement dès le chargement de la page doit être inclus dans l'événement intrinsèque Page_Load. Vous pouvez quand même écrire du code dans les blocs <%...%>, mais il sera exécuté au moment du rendu (de haut en bas, comme dans ASP) après le chargement de la page. Si vous avez besoin d'exécuter du code d'initialisation, celui-ci doit figurer dans l'événement Page_Load qui est immédiatement déclenché après le chargement de la page par le moteur ASP.NET, comme l'illustre l'exemple de code suivant.
<%@ Page Language="VB" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
' Place all startup code here, including initialization of
' variables, preloading of controls, and loading of
' data from a database.
If Page.IsPostBack Then
Response.Write("<br />Page has been posted back.")
End If
End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
Hello.<br />
<asp:Button ID="Button1" runat="server"
Text="Click to Post Back" />
</div>
</form>
</body>
</html>
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack)
{
Response.Write("<br />Page has been posted back.");
}
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
Hello.<br />
<asp:Button ID="Button1" runat="server"
Text="Click to Post Back" />
</div>
</form>
</body>
</html>
Un événement intrinsèque Page_Unload apparenté est l'événement qui est toujours déclenché en dernier durant le cycle de vie d'exécution de la page et peut être utilisé pour exécuter tout code de nettoyage de page.
Pour plus d'informations, consultez Vue d'ensemble du cycle de vie des pages ASP.NET et Modèle d'événements du contrôle serveur Web ASP.NET.
Voir aussi
Concepts
Vue d'ensemble de la classe de page ASP.NET
Modèle de code des pages Web ASP.NET
Nouveautés du modèle de page Web ASP.NET
Vue d'ensemble de la syntaxe des pages Web ASP.NET
Vue d'ensemble du cycle de vie des pages ASP.NET
Modèle d'événements du contrôle serveur Web ASP.NET
Autres ressources
Migration vers ASP.NET
Programmation de pages Web ASP.NET avec le script client