2 Stimmen

.NET Dynamisch Steuerelement nach Name abrufen

Ich muss ein .NET-Steuerelement (in ASP.NET) aus einer Zeichenfolge erstellen, die den Namen des Steuerelements darstellt.

Control myList = SomeSystemClass.GetControlByName("DropDownList");

Ich vermute, es gibt eine Reflexionsmethode in der .NET-Plattform, die dies ermöglicht, aber ich habe keine Ahnung, welche. Irgendwelche Ideen?

0 Stimmen

Sie können solche Steuerelemente nicht ohne eine HttpContext . Es wäre besser, Ihr Szenario zu erklären.

0 Stimmen

Geben Sie außerdem an, ob es sich um ein benutzerdefiniertes (Server-)Steuerelement oder ein Benutzersteuerelement handelt.

0 Stimmen

Es handelt sich um ein ASP.NET-Server-Steuerelement.

0voto

kbrimington Punkte 24546

Ich denke, Sie müssen eine der beiden Type.GetType() Überlastungen mit Activator.CreateInstance um eine Fabrikmethode wie die von Ihnen beschriebene zu erstellen.

Einschlägige Dokumente:

bearbeiten Mir ist gerade eingefallen, dass, wenn Sie in der Lage sind, den Typ-Cast zu verwenden, wie in Ihrem Codeschnipsel gezeigt, Reflexion absolut unnötig sein sollte. Wenn Sie die Möglichkeit haben, eine Variable zu deklarieren als DropDownList dann ist es weitaus einfacher, einfach die = new DropDownList(); und nennen es gut.

Bearbeiten 2 Für einen Moment gab es einen Beitrag, der Ihre Absicht richtig erkannt haben könnte. Wenn Sie nach einer Kontrolle suchen, die existiert bereits und Sie haben einen Handle auf seinen Namenscontainer (der die Seite oder ein datengebundenes Steuerelement sein kann), dann können Sie das Steuerelement mit der FindControl Methode und dann auf den entsprechenden Typ.

Einschlägige Dokumente: http://msdn.microsoft.com/en-us/library/486wc64h.aspx

0voto

Peter Punkte 9573

Für Server-Steuerungen:

Control c = Page.ParseControl("<asp:DropDownList runat='server' />");

Oder genauer gesagt, für Ihr Beispiel:

string ctrlName = "DropDownList";
Control c = Page.ParseControl("<asp:" + ctrlName  + " runat='server' />");

Für Benutzerkontrollen:

MyControl myControl1 = (MyControl)LoadControl("TempControl_Samples1.ascx");

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X