2008-11-20 6 views
2

Comment créer un contrôle personnalisé (pas un contrôle ASCX) et, plus important encore, l'utiliser dans votre projet? Je préfèrerais ne pas créer un projet séparé pour cela ou le compiler en tant que DLLContrôles personnalisés ASP.NET

Répondre

8

Les contrôles serveur doivent être compilés dans une DLL. Il ne devrait y avoir aucune raison d'avoir peur d'avoir un assemblage supplémentaire dans votre projet, et cela aide à créer une bonne organisation de projet. Les contrôles ASP.NET Server sont en fait des classes personnalisées dans un assembly. Ils n'ont pas de fichier de balisage "ascx" associé à eux.

Pour utiliser un contrôle serveur ASP.NET, vous devez indiquer à ASP.NET où rechercher sa classe.

Tout d'abord, créez un projet de bibliothèque de classes et ajoutez-le à votre solution, j'appellerai le mien "CustomControls.dll".

Une fois là-bas, ajouter une classe simple pour être votre webcontrol:

public class Hello : System.Web.UI.WebControl 
{ 
    public override Render(HtmlTextWriter writer) 
    { 
     writer.Write("Hello World"); 
     base.Render(writer); 
    } 
} 

Construisez votre projet, et l'ajouter comme une référence à votre principal projet web.

Maintenant, dans la page ASPX que vous souhaitez utiliser ce contrôle, vous devez l'enregistrer, il faut donc ajouter ce que la première ligne du ASPX après la directive Page:

<%@ Register TagPrefix="Example" Namespace="CustomControls" Assembly = "CustomControls" %> 

Maintenant, vous devriez avoir un contrôle nommé < Exemple: Bonjour > à votre disposition. Cela pourrait prendre une minute pour apparaître dans intellisense.

+0

Merci beaucoup! Non seulement cela a résolu mon problème mais m'a aussi aidé à mûrir plus en tant que développeur. –

1

Créer la classe pour le contrôle et créer la solution. Si tout se passe bien, le contrôle devrait maintenant être disponible sur la boîte à outils.

Parfois, le VS ne met pas à jour la boîte à outils. Si cela se produit ajouter la directive Inscrivez-vous à la page:

<%@ Register Assembly="NAME_OF_THE_ASSEMBLY" Namespace="NAMESPACE_OF_THE_CUSTOM_CONTROL" TagPrefix="cc1" %> 

puis il suffit d'utiliser le contrôle sur la page:

<cc1:mycustompanel id="MyCustomPanel1" runat="server"><asp:TextBox id="TextBox1" runat="server"></asp:TextBox></cc1:mycustompanel> 
1

Si vous ne voulez pas un fichier * .ascx, vous ne voulez pas un projet séparé, et vous ne voulez pas un fichier * .dll, que pensez-vous qu'il reste? Le code doit vivre quelque part.

1

Vous avez mentionné que vous vouliez éviter de créer un projet distinct. Comme les autres réponses l'ont indiqué, il est beaucoup plus courant de simplement créer un nouveau projet pour stocker vos contrôles personnalisés et les référencer. Il est cependant possible d'enregistrer un contrôle défini dans le même projet, en utilisant la syntaxe régulière:

<%@ Register TagPrefix="Example" Namespace="CustomControls" Assembly="CustomControls" %> 

Lorsque la « Assemblée » est l'assemblée où à la fois le contrôle et la page se trouve. Cela fonctionne beaucoup plus facilement si vous utilisez un projet d'application Web plutôt qu'un site Web.

Questions connexes