Öffentliche Methoden innerhalb der Benutzersteuerung c# .net
-
03-07-2019 - |
Frage
Wie kann die öffentliche Methode der Benutzersteuerung von der Seite aus aufgerufen werden?
Ich lade das Steuerelement dynamisch in OnInit auf der Seite. Irgendwelche Ideen?Aus irgendeinem Grund erhalte ich eine Build-Fehlermeldung, die besagt, dass die Methode nicht existiert, obwohl sie öffentlich ist.Ich fange an zu denken, dass Benutzerkontrollen den ganzen Aufwand nicht wert sind.
Lösung
Du hast gesagt
Control fracTemplateCtrl =
(FracTemplateCtrl)LoadControl("FracTemplateCtrl.ascx")
fracTemplateCtrl.TestMethod();
Sie müssen sagen
FracTemplateCtrl fracTemplateCtrl =
(FracTemplateCtrl)LoadControl("FracTemplateCtrl.ascx")
fracTemplateCtrl.TestMethod();
Beachten Sie, dass fracTemplateCtrl is
als a deklariert FracTemplateCtrl
, Also weiß Visual Studio, dass es eine hat TestMethod()
. Wenn es als als deklariert wird Control
, Visual Studio kann diese Annahme nicht treffen.
Andere Tipps
Gießen Sie die Benutzersteuerung auf den richtigen Typ?
Ohne Beispielcode ist das schwer zu sagen, aber ich vermute, Sie müssen Ihren Verweis auf das UserControl in den spezifischen Typ Ihres benutzerdefinierten Steuerelements umwandeln.Wenn Ihr UserControl beispielsweise vom Typ „PersonControl“ ist, würde Ihr Code etwa so aussehen:
PersonControl ctl = (PersonControl)LoadControl("PersonControl.ascx");
ctl.DoCustomMethod();
Wenn Ihre Klasse von UserControl erbt, stellen Sie sicher, dass Sie, wie andere gesagt haben, sie richtig aufnehmen. Zum Beispiel:
public MyControl : UserControl
{
public void MyMethod(){...}
}
in Ihrer Form:
private MyControl mycontrol = new MyControl();
private void MainForm()
{
this.Controls.Add(mycontrol);
InitializeComponent();
}
private void DoStuff()
{
((MyControl)mycontrol).MyMethod();
}
Mikes Antwort ist, wie es gemacht wird, aber Visual Studio kann etwas wackelig sein, wenn es darum geht, die UserControl -Klasse zu erkennen und zu beschweren, dass der Typ nicht existiert. In diesen Situationen muss ich a hinzufügen <% @Reference %>
Tag auf der Seite, um es zum Erkennen zu zwingen, auch wenn es im Web.config referenziert werden kann.