Heim  >  Artikel  >  Backend-Entwicklung  >  Zusammenfassung einiger Probleme beim dynamischen Laden von Steuerelementen in ASP.net

Zusammenfassung einiger Probleme beim dynamischen Laden von Steuerelementen in ASP.net

巴扎黑
巴扎黑Original
2016-12-20 14:00:371134Durchsuche

Ich sehe oft Leute, die sagen, man solle in ASP.net keine dynamischen Steuerelemente verwenden. Ich denke, der Hauptgrund ist, dass die Verwendung dynamischer Steuerelemente einige Probleme verursachen kann. Bei der Arbeit an Projekten mache ich immer Fehler, die durch dynamisch geladene Steuerelemente verursacht werden . Hier ist eine kleine Zusammenfassung.
1. Nach der Verwendung von LoadControl zum Laden von Steuerelementen reagieren einige Steuerelemente im Benutzersteuerelement nicht mehr auf Ereignisse.
Dieses Problem wird hauptsächlich dadurch verursacht, dass das Steuerelement beim Laden innerhalb von if (!Page.IsPostBack) platziert wird. Platzieren Sie es einfach außerhalb. Dieses Problem wird im Blog von Sigui ausführlich erläutert.
2. Es gibt ein Problem mit der Reaktion einiger Steuerelemente im Benutzersteuerelement. Beispielsweise löst eine Schaltfläche das CLICK-Ereignis nicht aus, wenn sie zum zweiten Mal ausgewählt wird.
Dies liegt daran, dass für das Steuerelement keine ID festgelegt wurde. Die Funktion der Steuerelement-ID wird im Folgenden ausführlich beschrieben. Wie zum Beispiel
Control userControl=(Control)Page.LoadControl(“Test.ascx”);
userControl.ID="Test";
AddControl(userControl);
3. Wenn die Benutzersteuerung Wenn es ein DataGrid-Steuerelement enthält, kann nach dem Laden des Steuerelements das Problem auftreten, dass nicht auf DataGrid-Ereignisse reagiert wird.
Dies scheint ein Fehler zu sein, die Konvertierung des geladenen Steuerelements muss erzwungen werden, wie zum Beispiel:
Test userControl=(Test)Page.LoadControl("Test.ascx");
Hinweis: Das Obige ist Verwendeter Testtyp, nicht Kontrolle!
Ich habe dieses Problem in meinem vorherigen Blog erwähnt. Diese Methode verringert die Skalierbarkeit des Systems. Ich habe eine Lösung, die ich mit Ihnen besprechen möchte (unter Verwendung eines Strategiemusters):
public class BaseControl : System.Web.UI.UserControl
{
public virtualBaseControl ProcessThisControl();

}
Alle Benutzersteuerelemente erben von BaseControl. Die Overide-Methode ProcessThisControl wird verwendet, z. B.:
diese als Test zurückgeben
Laden Sie das Steuerelement wie folgt:
BaseControl userControl=(BaseControl )Page. LoadControl("Test.ascx");
userControl.ProcessThisControl();

So verwenden Sie JavaScript in Benutzersteuerelementen.
Jeder weiß, dass die Verwendung clientseitiger Skripte die Reaktionsgeschwindigkeit der Seite erheblich verbessert und häufige Seitenaktualisierungen vermeidet. Die Verwendung von JavaScript zum Implementieren einer Teilsteuerung auf der Seite ist also eine bessere Möglichkeit. Was aber, wenn Sie auf ein bestimmtes Untersteuerelement in einem Benutzersteuerelement zugreifen?

Wird wie folgt verwendet: document.all.<%= TestControl.ClientID%>.disabled=true; //TestControl auf deaktiviert setzen
Wenn Sie es in einem C#-Skript schreiben: Page.RegisterStartupScript("OnInitControl",""); ist ein Benutzersteuerelement und TestControl ist ein untergeordnetes Steuerelement im Benutzersteuerelement.

Lassen Sie uns nun über die Steuer-ID sprechen. Beim Zugriff auf eine ASPX-Datei kompiliert IIS das ASPX-Skript. Schreiben Sie beim Kompilieren den Inhalt im Benutzersteuerelement auf dieselbe Seite. Um zu verhindern, dass die Steuerelemente auf der Seite denselben Namen wie die Steuerelemente im Benutzersteuerelement haben, ändern Sie die Steuerelementnamen im Benutzersteuerelement in: Name des Benutzersteuerelements : Untersteuerelement, die Steuerelement-ID wird in Benutzersteuerelement-ID_untergeordnete Steuerelement-ID geändert. Wenn beim dynamischen Laden eines Steuerelements die ID des Steuerelements nicht zugewiesen wird, ist die Steuerelement-ID die Steuerelement-ID des zuletzt geladenen Steuerelements. Daher sollte die ID sofort nach dem Laden des Benutzersteuerelements festgelegt werden.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn