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.

Juste curieux de savoir si vous avez trouvé une solution ou si l'une des solutions était de ce que vous recherchez?
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