Appel de la fonction de Contrôle de l'Utilisateur à partir du code behind de la page
Maintenant, c'est de toutes façon simplifiée, mais va ici:
J'ai un Contrôle Utilisateur qui se compose uniquement d'un seul *.fichier ascx. Le contrôle n'a pas de code-behind: c'est juste un script avec quelques fonctions, comme ceci:
<%@ Control Language="VB" EnableViewState="False" ClassName="MyControlType" %>
<script runat="server">
Public Function MyFunction() As String
return "CalledMyFunction!"
End Function
</script>
C'est la totalité du fichier. Je peux ajouter avec succès ce contrôle à une page aspx utilisant le balisage de la sorte:
<%@ Register Src="~/path/to/Control.ascx" TagPrefix="aaa" TagName="MyControl" %>
...
<aaa:MyControl runat="server" id="MyControl1" />
Maintenant ce que je veux faire est d'appeler la fonction MyFunction à partir de la page code-behind, comme ceci:
Dim someString As String = MyControl1.MyFunction()
Malheureusement, je ne peux pas le faire. Au lieu de cela, je reçois une erreur de compilation à l'effet de "'MyFunction' is not a member of 'System.Web.UI.UserControl'.
"
J'ai aussi essayé ceci:
Dim someString As String = DirectCast(MyControl1, MyControlType).MyFunction()
et puis le compilateur me dit, "Type 'MyControlType' is not defined.
"
J'ai joué avec beaucoup cela, et je ne peux pas le faire fonctionner. Tous les efforts pour lancer MyControl1 à une plus exacte type ont échoué, comme l'ont fait d'autres solutions de rechange. Je soupçonne que le problème est que le fichier ascx sans code-behind est pas en mesure d'être compilé pour une assemblée, mais le code-behind veut être compilé à l'assemblée et, par conséquent, le compilateur devient confus au sujet de ce type de contrôle est.
Que dois-je faire pour être en mesure d'appeler cette fonction?
[modifier]
Donc, je vais juste avoir à ajouter un code-behind pour le contrôle de l'utilisateur. C'est ce que je voulais faire de toute façon. Je voudrais encore savoir comment le faire, sans avoir besoin d'un, cependant.
Voir la edit: j'ai fini la création d'un code-behind pour le contrôle.
Car il ne fonctionne pas. Si cela fonctionne pour vous, c'est probablement parce que vous laissez visual studio crée le contrôle de son modèle et il y a un code-behind pour le contrôle.
Qui fonctionne selon ce compilateur modèle que vous utilisez, si vous avez une application web plutôt que d'un site web, vous êtes toujours en difficulté.
OriginalL'auteur Joel Coehoorn | 2008-12-11
Vous devez vous connecter pour publier un commentaire.
Bizarre fonctionne pour moi.
.
.
.
Bon, dernier rendez-vous! Le code ci-dessus fonctionne toujours pour moi si je supprime le MyControlType.vb classe!
Avez-vous également supprimer les .le concepteur.vb fichier?
Et êtes-vous la construction de ce qu'un site web ou une application web?
Oui, tout ce que j'ai maintenant est par défaut.aspx, par défaut.aspx.vb et WebUserControl.ascx
OriginalL'auteur BigJump
Assurez-vous que le MyControl1 objet dans votre code-behind est de type MyControlType et est répartit comme tel lors de l'appel de cette fonction. Le compilateur est en indiquant qu'il ne trouve pas la méthode MyFunction() dans la classe de base de UserControl.
OriginalL'auteur DCNYAM
Je ne fais pas beaucoup de VB (de plus en C# d'un mec) mais je pense que j'ai ce travail!
Vous avez une faute de frappe sur runat:
Essayer de corriger ça et ça marche!!!
Fonctionne pour moi - collé le code dans la réponse ci-dessous.
Est-ce que votre MyControlType hériter de UserControl?
J'ai essayé les deux façons: n'oubliez pas, cependant: il n'y a pas de code derrière pour le contrôle à tout, et je ne peux pas en ajouter une à l'instant, en raison des forces de l'extérieur.
OriginalL'auteur BigJump
La question a à voir avec il n'existe pas de fichier code-behind qui définit la classe. Dès que vous mettez la fonction publique dans un fichier code-behind, il fonctionne. Je pense ASP.NET est le traitement de la fonction plus comme une fonction anonyme plutôt que d'une réelle fonction dans une classe.
C'est ma pensée, de toute façon.
OriginalL'auteur Bryan Rehbein
Voici ce que j'ai fait.
Contenu de WebUserControl.ascx
Contenu de Défaut.aspx
OriginalL'auteur user21826
Je crois que vous avez besoin de dériver de WebUserControl.
Dans votre .ascx "Contrôle" de la balise de placer les éléments suivants:
Inherits="WebApplication1.WebUserControl1"
Bien sûr, vous aurez besoin d'utiliser les noms propres.
OriginalL'auteur user21826
De le placer dans votre code derrière les déclarations
ici myControl1 est l'id de votre compte utilisateur. Maintenant, vous pouvez appeler des fonctions publiques de ce contrôle.
OriginalL'auteur Mani
Vous devez ajouter votre code vb en vb fichier
OriginalL'auteur Mukund