2009-03-02 5 views
1

Wie kann die öffentliche Methode des Benutzersteuerelements aus der Seite aufgerufen werden?Öffentliche Methoden in Benutzersteuerelement C# .net

ich laden das Steuerelement dynamisch in OnInit auf der Seite.Any Ideen? Aus irgendeinem Grund erhalte ich einen Buildfehler, der besagt, dass die Methode nicht existiert, obwohl sie öffentlich ist. Ich fange an zu denken, dass Benutzersteuerelemente den Aufwand nicht wert sind.

+0

@gnomixa: Wie machst du den Anruf? Geht es um eine Art von Objekt? Wenn Sie dynamisch erstellen, schreit das zu mir, in diesem Fall müssen Sie den Aufruf der Methode auch über Reflektion durchführen, es sei denn, die Methode befindet sich auf einer bekannten Schnittstelle (Basisklasse oder Schnittstelle). – casperOne

Antwort

5

Sie haben gesagt,

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

Sie

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

Hinweis sagen müssen, dass fracTemplateCtrl is als FracTemplateCtrl erklärt, so Visual Studio weiß, dass es eine TestMethod() hat. Wenn es als Control deklariert wird, kann Visual Studio diese Annahme nicht vornehmen.

+0

@gnomixa: Kein Problem. Beachten Sie, dass Sie Ihre Antwort viel schneller bekommen hätten, wenn Sie Ihren Code mit der Frage gepostet hätten! ;] –

1

Wenden Sie das Benutzersteuerelement auf den richtigen Typ an?

1

Ohne Beispielcode ist es schwer zu sagen, aber ich schätze, Sie müssen Ihren Verweis auf das UserControl auf den spezifischen Typ Ihres benutzerdefinierten Steuerelements umwandeln. Zum Beispiel, wenn Ihr Benutzersteuerelement vom Typ „PersonControl“ ist, dann würde der Code wie folgt aussehen:

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

Ich versuchte Casting, aber das hat auch nicht funktioniert: Control FracTemplateCtrl = (FracTemplateCtrl) LoadControl ("FracTemplateCtrl.ascx"); Form.Controls.Add (fracTemplateCtrl); Response.Write (fracTemplateCtrl.TestMethod()); Fehler ist, dass TestMethod nicht gefunden wird – sarsnake

+0

Ihre FracTemplateCtrl muss auch vom Typ FracTemplateCtrl sein, zusätzlich zu den Besetzung. Der Code in diesem Kommentar versucht, TestMethod für eine Variable vom Typ Control aufzurufen. –

0

Wenn Ihre Klasse von Usercontrol erben, sicher sein, dass, wenn Sie es sind zugreifen, wie andere haben sagte, du machst es richtig. 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(); 
} 
0

Mike Antwort ist, wie es gemacht, aber Visual Studio kann über Erfassung der Klasse Usercontrol ein bisschen wackelig sein, und beschweren sich, dass die Art nicht existieren. In diesen Situationen muss ich ein <% @Reference %> Tag auf der Seite hinzufügen, um zu erzwingen, dass es erkannt wird, obwohl es möglicherweise in der Datei web.config referenziert wird.

Verwandte Themen