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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top