2009-07-16 5 views
0

ich ein Usercontrol A haben dieJavascript Interaktion zwischen ASP.NET Web Controls

  • ein Drop-Down enthält
  • ein Platzhalter

Zur Laufzeit der Platzhalter wird mit einigen Usercontrol B. bestückt werden

Es gibt bestimmte Zeiten, die ich das Javascript onchange-Ereignis in der Dropdown-Liste abfangen muss, um eine javascript-Funktion in B aufzurufen (um eine Client-Aktualisierung von B zu tun). Was ist ein gutes Design/eine gute Vorgehensweise, um dies zu tun?

Die naive Art und Weise ist die asp zu machen: Dropdownlist ein öffentliches Mitglied dann in eine öffentliche Methode B senden:

// In controlling code 
... 
userControlB.Initialize(userControlA.TheDropDownList); 
... 


// In usercontrol B 
public void Initialize(DropDownList dropdownFromA) 
{ 
    dropdownFromA.Attributes.Add("onchange", "myBfunction()"); 
} 

Aber etwas riecht mit diesem Ansatz schlecht. Ich möchte A und B so locker wie möglich halten. Irgendwelche besseren Ideen?

Antwort

3

Um sie wirklich entkoppelt zu halten, könnten Sie ein Beobachtermuster wie beschrieben here einführen. Ich würde das Drop-Down-Register haben, es ist ein eigenes Änderungsereignis, das den Beobachter darüber informieren würde, dass eine Änderung eingetreten ist. Wenn andere Steuerelemente am Client interessiert sind, werden sie dazu aufgefordert, benachrichtigt zu werden, wenn eine bestimmte Beobachtung gemacht wird.

bearbeiten

Nun Sie die Variablen auf einem logischen Namen für die Beobachtung nennen könnte, dann überprüfen Sie würden nur sicher mit ihm vor der Registrierung der Beobachter besteht zu machen.

Ein anderes System, das ich gesehen habe, wäre mehr wie ein Ereignis Dispatcher, im Wesentlichen, wenn Sie abonnieren Sie einen Namen für das Ereignis, dann feuern Sie würden zwei Argumente den Namen des Ereignisses und die Daten für das Ereignis. In diesem Modell hätten Sie nur einen Dispatcher auf einer Seite.

+0

+1 Ich denke, Ihre asp.net Steuerelemente entkoppelt zu halten ist von entscheidender Bedeutung, vor allem in Client-Skripten. Spart viel Zeit und Debugging (lesen Sie Geld: P), wenn Sie Ihre App aktualisieren. – Phil

+0

Das sieht interessant aus! Einige Newbie-Fragen: Nehmen wir an, das Control A hat zwei Drop-Downs und so zwei mögliche Ereignisse, das heißt, dass wir zwei Beobachter brauchen, o1 und o2? Wie kennt die Kontrolle B die Namen der beiden Beobachtervariablen, so dass sie ein o1script() ausführen kann? – Ying

0

Innerhalb des DOM bin ich mir ziemlich sicher, dass alle Steuerelemente zugänglich sind, so dass das Dropdown öffentlich ist nicht wirklich relevant, vor allem, wie Steuerelement a und Steuerelement b Mitglieder der gleichen Seite sind und so in Ihrem gegenseitig zugänglich sind Code-hinten.

Ich würde denken, eine lose gekoppelte Ansatz würde sein, Kontrolle B registrieren ihre Methode als Event-Listener auf Steuerelement ein Änderungsereignis. Ich bin mir nicht sicher, wie viel lockerer du könntest zwei Kontrollen machen, wo man auf Änderungen von anderen abhängt.

Verwandte Themen