Comment : créer par programme des instances de contrôles utilisateur ASP.NET
Mise à jour : novembre 2007
De même que vous pouvez créer par programme une instance d'un contrôle serveur dans une page Web ASP.NET, vous pouvez le faire avec un contrôle utilisateur.
Pour créer une instance d'un contrôle utilisateur par programme
Dans le contrôle utilisateur, veillez à ce que la directive @ Control contienne un attribut ClassName qui assigne une classe au contrôle utilisateur.
L'exemple suivant définit l'attribut ClassName de façon à ce qu'il type fortement un contrôle utilisateur.
<%@ Control className="MyUserControl" %>
Dans la page dans laquelle vous souhaitez utiliser le contrôle utilisateur, créez une référence à ce contrôle utilisateur avec la directive @ Reference.
Lorsque vous créez un contrôle utilisateur par programme, le type fort pour votre contrôle utilisateur n'est disponible pour la page Web ASP.NET qu'une fois que vous avez créé une référence qui y renvoie. Par exemple, le code suivant crée une référence à un contrôle utilisateur créé dans le fichier MyUserControl.ascx.
<%@ Reference Control="MyUserControl.ascx" %>
Remarque : Vous utilisez @ Reference lorsque vous projetez de charger le contrôle par programme. Vous utilisez la directive @ Register lorsque vous ajoutez de façon déclarative un contrôle utilisateur à la page. Pour plus d'informations, consultez Comment : inclure un contrôle utilisateur dans une page Web ASP.NET.
Créez une variable d'instance pour le contrôle utilisateur, à l'aide du nom de classe du contrôle. La classe fera partie de l'espace de noms ASP.
Par exemple, si vous souhaitez créer une instance du contrôle utilisateur déclarée comme classe Spinner, vous utiliserez une syntaxe comparable à la syntaxe suivante :
Protected Spinner1 As ASP.Spinner
Protected ASP.Spinner Spinner1;
Créez une instance du contrôle utilisateur par l'intermédiaire du code en appelant la méthode LoadControl.
Assignez des valeurs de propriété selon les besoins, puis ajoutez le contrôle à la collection ControlCollection d'un conteneur dans la page, tel qu'un contrôle PlaceHolder.
Remarque : Lorsque vous ajoutez des contrôles à l'objet ControlCollection à l'aide de la méthode Add, ils sont placés dans la collection dans l'ordre dans lequel ils sont traités. Si vous souhaitez ajouter un contrôle à un emplacement spécifique de la collection, utilisez la méthode AddAt et spécifiez l'emplacement d'index auquel vous souhaitez stocker le contrôle.
Exemple
L'exemple suivant montre une page Web ASP.NET chargeant un contrôle utilisateur par programme. La page inclut une directive @°Reference pour spécifier le fichier du contrôle. La méthode LoadControl lit le fichier et l'instancie comme un contrôle pouvant être ajouté à la page.
<%@ Page Language="VB" %>
<%@ Reference Control="~\Controls\Spinner.ascx" %>
<script >
Private Spinner1 As ASP.Spinner
Protected Sub Page_Load(ByVal sender As Object, _
ByVal e As System.EventArgs)
Spinner1 = CType(LoadControl("~\Controls\Spinner.ascx"), _
ASP.Spinner)
' Set MaxValue first.
Spinner1.MaxValue = 20
Spinner1.MinValue = 10
PlaceHolder1.Controls.Add(Spinner1)
End Sub
Protected Sub Button1_Click(ByVal sender As Object, _
ByVal e As System.EventArgs)
Label1.Text = Spinner1.CurrentNumber.ToString()
End Sub
</script>
<html>
<head id="Head1" >
<title>Load User Control Programmatically</title>
</head>
<body>
<form id="form1" >
<div>
<asp:PlaceHolder runat=server ID="PlaceHolder1" />
<br />
<asp:Button ID="Button1"
Text="Button"
OnClick="Button1_Click" />
<br />
<br />
<asp:Label ID="Label1" Text=""></asp:Label>
</div>
</form>
</body>
</html>
<%@ Page Language="C#" %>
<%@ Reference Control="~/Controls/Spinner.ascx" %>
<script >
private ASP.Spinner Spinner1;
protected void Page_Load(object sender, EventArgs e)
{
Spinner1 = (ASP.Spinner)LoadControl("~/Controls/Spinner.ascx");
// Set MaxValue first.
Spinner1.MaxValue = 20;
Spinner1.MinValue = 10;
PlaceHolder1.Controls.Add(Spinner1);
}
protected void Button1_Click(object sender, EventArgs e)
{
Label1.Text = Spinner1.CurrentNumber.ToString();
}
</script>
<html>
<head id="Head1" >
<title>Load User Control Programmatically</title>
</head>
<body>
<form id="form1" >
<div>
<asp:PlaceHolder runat=server ID="PlaceHolder1" />
<br />
<asp:Button ID="Button1"
Text="Button"
OnClick="Button1_Click" />
<br />
<br />
<asp:Label ID="Label1" Text=""></asp:Label>
</div>
</form>
</body>
</html>