2009-10-14 5 views
1

J'essaye de créer mon premier contrôle de serveur d'ASP.net dérivé d'un panneau. Pour une raison quelconque, je suis incapable d'obtenir la page .aspx pour reconnaître mon balise de serveur même si l'application reconnaît la classe et l'espace de noms de mon contrôle.Comment puis-je obtenir ASP.NET pour reconnaître mon contrôle serveur personnalisé?

Voici les étapes que j'ai utilisé:

1) Je créé une CollapsablePanel de classe que je l'ai placé dans mon répertoire site_code. J'utilise une application Web et non un site Web, donc App_Code n'est pas vraiment disponible pour moi.

Namespace webstation.WebControls 

    Public Class CollapsablePanel 
     Inherits System.Web.UI.WebControls.Panel 


    End Class 

End Namespace 

2) Dans le fichier .aspx J'ai ajouté <% @ Register TagPrefix = "WebStation" Namespace = "MyApplication.webstation.WebControls" %>

J'ai construit le projet, mais mon le préfixe de tag personnalisé n'apparaît pas. Si je vais juste en avant et que je tape l'éditeur ne jette pas une erreur, cependant la page le fait quand je le publie et essaye d'y accéder. Si j'essaie d'accéder à la classe à partir du codebehind (Imports MyApplication.webstation.WebControls), le contrôle personnalisé apparaît dans IntelliSense, donc je sais que Visual Studio lit les informations de classe dans une certaine mesure.

Qu'est-ce que je fais mal ici? Toutes les pensées sont grandement appréciées.

Mike

Répondre

0

j'ai pu le faire fonctionner comme prévu une fois que je suis allé de l'avant et a créé un projet de bibliothèque de classes dans le même solution, construit le projet, copié la DLL de la corbeille de la bibliothèque de classes et l'a placé dans un dossier de mon projet Web utilisé pour contenir des binaires externes. J'ai également ajouté une référence au fichier .dll dans le projet. Une fois que j'ai fait cela, alors la syntaxe:

<%@ Register Assembly="webstation.WebControls" Namespace="webstation.WebControls" TagPrefix="webstation" %> 

a commencé à travailler. Est-ce que quelqu'un sait si je suis en mesure de mettre à jour en quelque sorte automatiquement le .DLL compilé dans mon projet Web de la bibliothèque de classe dans la même solution? Ou dois-je simplement aller dans le dossier bin à chaque fois et le copier manuellement dans le projet web?

Merci,

Mike

2

semble que vous pouvez manquer l'attribut TagName comme

<%@ Register TagPrefix="webstation" TagName="CollapsiblePanel" Namespace="MyApplication.webstation.WebControls" %> 

une fois que vous faites cela, vous devriez être en mesure d'y accéder comme

<webstations:CollapsiblePanel id='usercontrol1" runat="server" /> 
+0

Je ne suis pas sûr que je devrais avoir le TagName que je le voudrais pour fournir toutes les classes que je devrai dans l'espace sans avoir à enregistrer chacun individuellement. De plus, la vidéo tutoriel sur ASP.net n'utilise pas non plus de TagName: http://www.asp.net/learn/videos/video-297.aspx – mclark1129

+0

Si vous voulez enregistrer * tout * des classes Dans un espace de nommage donné, je crois que vous devez fournir l'attribut assembly dans votre directive @Register. Donc quelque chose comme Assembly = "MyApplication.webstation.WebControls", en supposant que WebControls est un projet qui génère une DLL en sortie. –

+0

Vous avez raison MIke, vous n'avez pas besoin de spécifier la variable, mais vous devez spécifier l'assemblage. Je l'ai juste essayé et cela a fonctionné après que j'ai ajouté l'attribut d'assembly pour ma DLL –

1

Découvrez Scott Gu de article de blog sur l'enregistrement des contrôles, j'aime les enregistrer dans le fichier web.config moi-même. http://weblogs.asp.net/scottgu/archive/2006/11/26/tip-trick-how-to-register-user-controls-and-custom-controls-in-web-config.aspx

Vous devez vous assurer d'avoir une référence complète à la classe de contrôle, c'est-à-dire le nom et l'espace de noms de la bibliothèque. Je place mes contrôles dans une bibliothèque de classes, mais vous pouvez les inclure dans votre dossier App_Code. Vous pouvez également enregistrer des contrôles utilisateur dans le web.config, les deux exemples:

Questions connexes