Modèle de code des pages Web ASP.NET

Mise à jour : novembre 2007

Une page Web ASP.NET est composée de deux parties :

  • Les éléments visuels, c'est-à-dire le balisage, les contrôles serveur et le texte statique.

  • La programmation logique de la page, qui comprend les gestionnaires d'événements et d'autres éléments de code.

ASP.NET fournit deux modèles pour gérer les éléments visuels et le code : le modèle de page à fichier unique et le modèle de page code-behind. Les deux modèles fonctionnent de la même manière et tous deux pourront utiliser les mêmes contrôles et le même code.

Cette rubrique explique comment fonctionne chaque modèle et fournit des suggestions aidant à savoir quand choisir un modèle ou un autre.

Modèle de page à fichier unique

Dans le modèle de page à fichier unique, le balisage et le code de programmation de la page se trouvent dans le même fichier .aspx physique. Le code de programmation est situé dans un bloc de script qui contient l'attribut , destiné à le marquer comme étant un code qu'ASP.NET doit exécuter.

L'exemple de code suivant montre une page à fichier unique qui contient un contrôle Button et un contrôle Label. La partie en surbrillance montre le gestionnaire d'événements Click pour le contrôle Button à l'intérieur d'un bloc de script.

<%@ Page Language="VB" %>
<script >
    Protected Sub Button1_Click(ByVal sender As Object, _            ByVal e As System.EventArgs)        Label1.Text = "Clicked at " & DateTime.Now.ToString()    End Sub
</script>

<html>
<head id="Head1" >
  <title>Single-File Page Model</title>
</head>
<body>
  <form id="form1" >
    <div>
      <asp:Label ID="Label1" 
         Text="Label">
      </asp:Label>
      <asp:Button ID="Button1" 
          OnClick="Button1_Click" Text="Button">
      </asp:Button>
    </div>
  </form>
</body>
</html>
<%@ Page Language="C#" %>
<script >
void Button1_Click(Object sender, EventArgs e){    Label1.Text = "Clicked at " + DateTime.Now.ToString();}
</script>
<html>
<head>
  <title>Single-File Page Model</title>
</head>
<body>
  <form >
    <div>
       <asp:Label id="Label1" 
          Text="Label">
       </asp:Label>
       <br />
       <asp:Button id="Button1" 
          
         onclick="Button1_Click" 
         Text="Button">
      </asp:Button>
    </div>
  </form>
</body>
</html>

Le bloc script peut contenir autant de code que la page en requiert. Le code peut se composer de gestionnaires d'événements pour les contrôles de la page (comme dans l'exemple), de méthodes, de propriétés et de tout le code utilisé habituellement dans un fichier de classe. Au moment de l'exécution, une page à fichier unique est traitée comme une classe dérivant de la classe Page. La page ne contient pas de déclaration de classe explicite. Le compilateur génère à sa place une nouvelle classe dont les membres sont les contrôles. (Tous les contrôles ne sont pas exposés comme membres d'une page ; quelques-uns sont des enfants d'autres contrôles). Le code de la page devient partie intégrante de la classe ; par exemple, les gestionnaires d'événements que vous créez deviennent membres de la classe Page dérivée.

Pour plus d'informations, consultez Vue d'ensemble de la classe de page ASP.NET.

Modèle de page code-behind

Le modèle de page code-behind vous permet de conserver le balisage dans un fichier (le fichier .aspx) et le code de programmation dans un autre. Le nom du fichier de code varie en fonction du langage de programmation utilisé.

Remarque :

Tous les langages de programmation .NET ne permettent pas de créer des fichiers code-behind pour les pages Web ASP.NET. Les langages doivent prendre en charge des classes partielles. Par exemple, le J#, qui ne prend pas en charge les classes partielles, ne permet pas de créer des fichiers code-behind pour les pages ASP.NET.

Par exemple, si vous utilisez une page nommée SamplePage, le balisage se trouvera dans le fichier SamplePage.aspx et le code dans un fichier nommé SamplePage.aspx.vb (en Visual Basic), SamplePage.aspx.cs (en C#), etc.

Remarque :

Le modèle code-behind utilisé dans le .NET Framework version 2.0 est différent de celui qui est utilisé dans les versions précédentes.

Dans le modèle code-behind, l'exemple utilisé dans la section précédente pour la page à fichier unique se présentera en deux parties. Le balisage se trouvera dans un des fichiers (dans cet exemple, SamplePage.aspx) et ressemblera à la page à fichier unique, comme dans l'exemple de code suivant.

<%@ Page Language="VB" CodeFile="SamplePage.aspx.vb" 
    Inherits="SamplePage" AutoEventWire="false" %>
<html>
<head  >
   <title>Code-Behind Page Model</title>
</head>
<body>
  <form id="form1" >
    <div>
       <asp:Label id="Label1" 
          Text="Label" >
      </asp:Label>
      <br />
      <asp:Button id="Button1" 
          
         onclick="Button1_Click" 
         Text="Button" >
       </asp:Button>
    </div>
  </form>
</body>
</html>
<%@ Page Language="C#" CodeFile="SamplePage.aspx.cs" 
    Inherits="SamplePage" AutoEventWireup="true" %>
<html>
<head  >
   <title>Code-Behind Page Model</title>
</head>
<body>
  <form id="form1" >
    <div>
       <asp:Label id="Label1" 
          Text="Label" >
      </asp:Label>
      <br />
      <asp:Button id="Button1" 
          
         onclick="Button1_Click" 
         Text="Button" >
       </asp:Button>
    </div>
  </form>
</body>
</html>

Dans la page .aspx, le modèle à fichier unique et le modèle code-behind présentent deux différences. Dans le modèle code-behind, aucun bloc de script n'a d'attribut . (La page peut contenir des blocs de script sans l'attribut si vous souhaitez écrire un script côté client dans la page.) La deuxième différence est que la directive @ Page du modèle de code-behind contient des attributs qui référencent un fichier externe (SamplePage.aspx.vb ou SamplePage.aspx.cs), ainsi qu'une classe. Ces attributs lient la page .aspx à son code.

Le code se trouve dans un fichier distinct. L'exemple de code suivant montre un fichier code-behind qui contient le même gestionnaire d'événements Click que l'exemple de la page à fichier unique.

Partial Class SamplePage
    Inherits System.Web.UI.Page
    Protected Sub Button1_Click(ByVal sender As Object, _
            ByVal e As System.EventArgs) Handles Button1.Click
        Label1.Text = "Clicked at " & DateTime.Now.ToString()
    End Sub
End Class
using System;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class SamplePage : System.Web.UI.Page
{
    protected void Button1_Click(object sender, EventArgs e)
    {
        Label1.Text = "Clicked at " + DateTime.Now.ToString();
    }
}

Le fichier code-behind contient les déclarations de classe complètes dans l'espace de noms par défaut. Toutefois, la classe est déclarée avec le mot clé partial qui indique qu'elle n'est pas contenue tout entière dans un fichier. Au lieu de cela, lorsque la page s'exécute, le compilateur lit la page .aspx et le fichier qu'il référence dans la directive @ Page, les assemble en une seule classe, puis les compile en une seule unité dans une classe unique.

Le fichier de classe partielle hérite de la classe Page de la page. Pour plus d'informations, consultez Vue d'ensemble de la classe de page ASP.NET.

Choix d'un modèle de page

Les modèles de page à fichier unique ou à code-behind sont fonctionnellement les mêmes. Au moment de l'exécution, ils s'exécutent de la même manière, sans aucune différence de performances. Le choix d'un modèle de page dépend par conséquent d'autres facteurs, par exemple la façon dont vous souhaitez organiser le code dans votre application, s'il est important de séparer le codage de la conception de la page, etc.

Remarque :

Les exemples que vous trouvez dans la documentation se présentent souvent sous forme de pages à fichier unique. C'est surtout plus pratique pour le lecteur, parce que cela évite d'avoir à illustrer deux fichiers pour chaque exemple. Le fait que vous trouviez des exemples à fichier unique dans la documentation ne doit pas être interprété comme le signe d'une préférence quelconque pour ce type de pages par rapport aux pages code-behind, ni de l'existence d'un avantage inhérent à ce modèle.

Avantages des pages à fichier unique

En règle générale, le modèle à fichier unique convient aux pages dans lesquelles le code se compose essentiellement de gestionnaires d'événements pour les contrôles de la page.

Les avantages du modèle de page à fichier unique sont notamment les suivants :

  • Dans les pages contenant peu de code, pouvoir conserver le code et le balisage dans le même fichier peut se révéler plus intéressant que certains autres avantages du modèle code-behind. Par exemple, il peut être plus facile d'étudier une page à fichier unique, qui vous permet de consulter le code et le balisage dans un même emplacement.

  • Les pages écrites à l'aide du modèle à fichier unique sont légèrement plus faciles à déployer ou à transférer à un autre programmeur, puisqu'elles ne se composent que d'un fichier.

  • Comme il n'existe aucune dépendance entre les fichiers, une page à fichier unique est plus facile à renommer.

  • Gérer les fichiers dans un système de contrôle de code source est légèrement plus facile, la page se présentant de manière autonome dans un seul fichier.

Avantages des pages code-behind

Les pages code-behind offrent certains avantages qui les rendent plus appropriées aux applications Web comportant un volume de code élevé ou dans lesquelles un site Web est créé par plusieurs développeurs.

Les avantages du modèle code-behind sont notamment les suivants :

  • Les pages code-behind séparent clairement le balisage (l'interface utilisateur) et le code. Cela peut être pratique pour charger un concepteur de travailler sur le balisage pendant qu'un programmeur écrit le code.

  • Le code n'est pas exposé aux concepteurs de pages ni à ceux qui travaillent uniquement sur le balisage des pages.

  • Le code peut être réutilisé pour plusieurs pages.

Compilation et déploiement

La compilation et le déploiement des pages à fichier unique et à code-behind se déroulent de façon identique. La solution la plus simple consiste à copier la page sur le serveur cible. Si vous utilisez des pages code-behind, vous devrez copier la page .aspx et le fichier de code. Lorsque la page sera demandée pour la première fois, ASP.NET la compilera et l'exécutera. Notez que dans les deux scénarios, vous déploierez le code source avec le balisage.

Vous pouvez aussi précompiler votre site Web. Dans ce cas, ASP.NET produit le code objet de vos pages, que vous pouvez alors copier sur le serveur cible. La précompilation fonctionne pour les modèles à fichier unique comme pour le code-behind et la sortie est la même pour les deux modèles. Pour plus d'informations, consultez Vue d'ensemble de la précompilation ASP.NET.

Voir aussi

Concepts

Vue d'ensemble du cycle de vie des pages ASP.NET

Vue d'ensemble de la compilation ASP.NET