Question

Comment invoquer la méthode publique du contrôle utilisateur depuis la page?

Je charge le contrôle de manière dynamique dans OnInit sur la page. Des idées? Pour une raison quelconque, je reçois une erreur de construction qui dit que la méthode n'existe pas, même si elle est publique. Nous commençons à penser que les contrôles utilisateur ne valent pas la peine.

Était-ce utile?

La solution

Vous avez dit

Control fracTemplateCtrl = 
   (FracTemplateCtrl)LoadControl("FracTemplateCtrl.ascx")
fracTemplateCtrl.TestMethod();

vous devez dire

FracTemplateCtrl fracTemplateCtrl =
   (FracTemplateCtrl)LoadControl("FracTemplateCtrl.ascx")
fracTemplateCtrl.TestMethod();

Notez que fracTemplateCtrl is est déclaré en tant que FracTemplateCtrl, Visual Studio sait donc qu'il possède un TestMethod(). Lorsqu’il est déclaré en tant que Control, Visual Studio ne peut pas faire cette hypothèse.

Autres conseils

Lancez-vous le type de contrôle utilisateur sur le type correct?

Sans exemple de code, il est difficile de dire avec certitude, mais je suppose que vous devez attribuer votre référence à UserControl au type spécifique de votre contrôle personnalisé. Par exemple, si votre UserControl est de type & "PersonControl &", Votre code devrait alors ressembler à ceci:

PersonControl ctl = (PersonControl)LoadControl("PersonControl.ascx");
ctl.DoCustomMethod();

Si votre classe hérite de UserControl, assurez-vous que lorsque vous y accédez, comme d'autres l'ont dit, vous le diffusez correctement. Par exemple:

public MyControl : UserControl
{
    public void MyMethod(){...}
}

dans votre formulaire:

private MyControl mycontrol = new MyControl();
private void MainForm()
{
    this.Controls.Add(mycontrol);

    InitializeComponent();
}

private void DoStuff()
{
    ((MyControl)mycontrol).MyMethod();
}

La réponse de Mike est de savoir comment procéder, mais Visual Studio peut être un peu confus quant à la détection de la classe UserControl et se plaindre du fait que le type n'existe pas. Dans ces situations, je dois ajouter une balise <% @Reference %> sur la page pour la forcer à reconnaître, même si elle est référencée dans le fichier web.config.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top