2009-03-09 2 views
0

Ich habe eine Reihe von Benutzersteuerelementen. Die Benutzersteuerelemente können auf verschiedenen Seiten verwendet werden. Das Verhalten der Benutzersteuerelemente hängt davon ab, auf welcher Seite sie verwendet werden.Host-Seite - Benutzersteuerungskommunikation ASP.NET

Wie kann ich einen Parameter auf der Host-Seite festlegen, auf den ALLE Benutzersteuerelemente zugreifen können?

Antwort

2

Ihre Beschreibung "Das Verhalten der Benutzersteuerelemente hängt davon ab, auf welcher Seite sie verwendet werden" weist auf einen Konstruktionsfehler hin. Das Steuerungsmodell in ASP.NET wurde um encapsulation und OOP entworfen, was bedeutet, dass ein Steuerelement hinsichtlich seines umgebenden Kontexts agnostisch sein sollte. Sie sollten Ihr Design in diesem Sinne überdenken.

Das heißt worden ist, ist es durchaus möglich ist (Warnung - schlechte Praxis) eine öffentliche Eigenschaft auf Ihrer Seite zu setzen, die die Kontrollen lesen:

class MyPage : Page 
{ 
    public string MyProperty; 
} 

class MyUserControl : UserControl 
{ 
    void Page_Load(object sender, EventArgs e) 
    { 
     ((MyPage)this.Page).MyProperty //casts Page as the specific page 
    } 
} 
0

ich mit Rex zustimmen, ich bin misstrauisch von der Anforderung.

Das gesagt, ich finde es sauberer, es in die HttpContext.Current.Items Sammlung zu setzen. Die Seite würde den Wert vorzugsweise auf ihr OnInit setzen, indem sie eine nette Klasse verwendet, um die Informationen zu erhalten.

Wenn Sie wollen, können Sie den Wrapper tatsächlich lesen die aktuelle Url, oder überprüfen Sie den Typ der Seite (die in der Regel die aktuelle Handler HttpContext.Current.Handler/nicht erinnern, wenn Ajax das betrifft), die kann Ihnen eine Lösung bringen, die die Seite nicht braucht, um irgendetwas einzustellen.

0

Wie Rex M erwähnt, ist dies aus mehreren Gründen eine schlechte Praxis. Wenn ich benötigt, um die übergeordnete Seite aus dem Steuerelement zu verweisen, übertrage ich einen Verweis auf die Seite in das Steuerelement, anstatt das Steuerelement auf das übergeordnete Element verweisen zu lassen.

Ich könnte in Betracht ziehen, eine Schnittstelle zu erstellen, die alle diese Seiten implementieren und in das Steuerelement übergeben können. Die Schnittstelle würde die Typsicherheit garantieren. Wenn Sie dieses Steuerelement auf einer neuen Seite verwenden, muss diese Seite die Schnittstelle implementieren, bevor Sie sie mit dem Steuerelement verwenden können. Dies würde bei Gelegenheiten helfen, wo Sie das Steuerelement auf eine neue Seite werfen und vergessen, dass das Steuerelement diese Beziehung mit dem Elternteil hat (diese Beziehung kann fragil sein, was einer der Gründe dafür ist, dass es ein Nein ist).