Kann mir jemand erklären, wann ich jeden davon benutzen soll? Sie scheinen in vielen Fällen fast austauschbar.
Das benutzerdefinierte Steuerelement wird der Symbolleiste hinzugefügt, während das Benutzersteuerelement (ascx) dies nicht kann. Das benutzerdefinierte Steuerelement wird nicht im Designer gerendert, während das Benutzersteuerelement dies tut. Darüber hinaus, wie wählen Sie, welche die richtige ist?
Außerdem suche ich nach dem besten Weg, um auf die Steuerelemente von JavaScript (GetElementById) zuzugreifen. Also, ein Punkt in die richtige Richtung für die Unterstützung der Client-Seite wäre großartig.
Dies stammt von Microsofts Website:
Webbenutzersteuerelemente
Benutzerdefinierte Steuerelemente im Web
Ein UserControl muss von einer Website gehostet werden und ist einer ASCX-Datei mit dem Codebehind-Modell zugeordnet. Daher können Sie mit einem Benutzersteuerelement das grundlegende Markup für das Steuerelement in der ASCX-Datei definieren und den gesamten Code in die ASCX.CS-Datei einfügen.
Ein WebControl ist nur eine Klasse und lässt Sie keine assoziierte ASCX-Datei definieren; Sie müssen die Render-Funktion überschreiben, um alle Markups auszudrucken, die das Steuerelement erzeugen soll. Da es jedoch nicht von einem ASCX abhängt, kann es in eine gemeinsame Bibliothek gestellt werden. (eine DLL)
Um auf Ihre Frage zu antworten: Sowohl Web- als auch UserControls haben den gleichen Vorteil - sie nehmen einen Teil einer Seite und kapseln ihn ein. Ich verwende UserControls, wenn der betreffende Code nur für eine meiner Websites gilt. Wenn ich an mehreren Standorten ähnlichen Code verwende, wandle ich den Code in ein WebControl um und verschiebe es in eine gemeinsam genutzte Bibliothek. Auf diese Weise, wenn ich es aktualisieren muss, mache ich Änderungen an einer Stelle und nicht 3 oder 4.
Tipp: Sie können einige Probleme bei der Definition Ihres eigenen WebControl umgehen, indem Sie von einem der Standard-WebControls von ASP erben. Viele Standardsteuerelemente wie Label oder Image sind nicht versiegelt - Sie können von ihnen erben und ihre Methoden überschreiben, um Ihre eigene spezialisierte Version dieses Steuerelements zu erstellen. Dies ist viel einfacher und weniger fehleranfällig als die direkte Erweiterung von WebControl.
Ich denke, was Sie denken, ist ein benutzerdefiniertes Steuerelement im Vergleich zu einem Benutzersteuerelement, die beide Websteuerelemente sind. Ein Benutzersteuerelement verfügt über keine Designer-Benutzeroberfläche, während ein benutzerdefiniertes Steuerelement dies kann.
Normalerweise trennen wir unsere Benutzeroberfläche mithilfe von UserControls in separate Funktionsbereiche. Wenn wir jedoch Funktionen erstellen, die wir für mehrere Lösungen verwenden möchten, erstellen wir sie im Allgemeinen als benutzerdefinierte Steuerelemente.
Nur benutzerdefinierte Steuerelemente können der Toolbox hinzugefügt werden.
Hier ist ein Auszug von Microsoft:
Benutzersteuerelemente werden mit dem Projekt kompiliert und müssen in derselben Sprache wie das Projekt geschrieben werden.
Benutzerdefinierte Steuerelemente können auf der Zeichenfläche abgelegt und durch Festlegen von Eigenschaften konfiguriert werden, ohne dass der Programmierer alle Interna kennt (kann gut oder schlecht sein). Da das benutzerdefinierte Steuerelement in der DLL vorkompiliert wird, muss es nicht in derselben Sprache wie das Projekt geschrieben werden.
Wenn auf Details geachtet wird, kann das benutzerdefinierte Steuerelement so geschrieben werden, dass es im Designer angezeigt wird (obwohl dies den Aufwand vielleicht nicht wert ist).
Um von JavaScript auf sie zuzugreifen, sollten Sie document.GetElementById('<%=TheControl.ClientID%>')
verwenden.
Der Unterschied zwischen einem Websteuerelement und einem Benutzersteuerelement besteht darin, dass ein Benutzersteuerelement die Ascx-Datei mit der HTML-Definition hat, während das Websteuerelement dies nicht tut. das ist die Ursache für andere Unterschiede. Auch für Benutzersteuerelemente können Sie new Control()
nicht verwenden, stattdessen müssen Sie LoadControl
verwenden, da das .ascx geladen wird.
Für einfache Steuerelemente, die von .Net-Steuerelementen wie einem Textfeld mit Validierung oder etwas Ähnlichem erben, verwende ich Websteuerelemente; Für komplexere Steuerelemente mit html und inneren Steuerelementen neige ich dazu, Benutzersteuerelemente zu verwenden. Aber es ist im Grunde Ihre persönliche Präferenz.
Einfach:
Benutzerkontrolle:
WebControl:
Das stimmt nicht ganz. Ein Webcontrol ist wie eine Schaltfläche, und Sie können einen Designer dafür erstellen, so dass es im Designer-Modus gerendert wird.
Der Hauptunterschied besteht darin, dass ein Webcontrol eine atomare Einheit ist. Es sollte genauso funktionieren wie alle anderen Standard-Serversteuerelemente in Visual Studio (einschließlich des Designer-Modus). Darüber hinaus ist es vollständig in Code erstellt und in der DLL gespeichert (d. H. Es gibt keine HTML-Seite, und nichts ist auf der Website veröffentlicht).
Ein Benutzersteuerelement ist die .NET-Version eines ASP-Includes. Es gibt ein HTML-Snippet mit der entsprechenden Code-Behind-Seite. Es gibt eine ASCX-Datei, die während der Veröffentlichung auf die Website übertragen wird. Ein zusätzlicher Hinweis, diese sind einfacher zu entwickeln als Serversteuerungen.
Ist einer besser als der andere? Das hängt davon ab, was das Ziel ist. Aber im Allgemeinen, wenn Sie etwas für andere Leute / Projekte bauen, gehen Sie mit einem webcontrol. Wenn Sie etwas für den Verbrauch Ihres eigenen Projekts erstellen, dann gehen Sie mit einem Benutzersteuerelement.
Was JS betrifft, ist es schwerer zu beschreiben und rechtfertigt eine ziemlich große Diskussion. Für Serversteuerelemente müssen Sie die Hooks für das JS angeben, um die Client-ID für jedes der internen Steuerelemente abzurufen. Während eines Benutzersteuerelements können Sie das JS direkt auf dem Benutzersteuerelement codieren und auf die Steuerelemente genauso wie in einer ASPX-Seite zugreifen.
Tags und Links asp.net controls client-side web-user-controls