2009-03-24 11 views
0

Ich habe es mit einer Masterseite zu tun, die wie üblich in verschiedene Content-Platzhalter aufgeteilt ist. Auf mehreren Seiten verwende ich eine Multiview, um den Inhalt basierend auf verschiedenen Ansichtsmodi (Ansicht/Bearbeiten/Hinzufügen) ein- und auszublenden. Das bedeutet ein Multiview pro Masterseiteninhalt Platzhalter ...Verknüpfen mehrerer asp.NET MultiViews

Das Problem kommt, wenn ich die Ansichtsmodi wechseln muss, zB von 'Ansicht' zu 'Bearbeiten'. Ich muss jedes Multiview auf der Seite ändern, um die entsprechenden Informationen anzuzeigen. Also sagen wir, es gibt 4 verschiedene Platzhalter für Inhalte mit 3 verschiedenen Ansichtsmodi - das sind 12 Zeilen ziemlich langweiliger Code.

Ich frage mich, ob es eine Möglichkeit gibt, alle Multiviews auf einer Seite zu synchronisieren oder zu verknüpfen, so dass, wenn man sich ändert - sie alle entsprechend ändern? Wie durch eine Art Master-Multiview?

Ich habe über die Verwendung des Aktivierungsereignisses der Ansicht nachgedacht, aber das würde immer noch bedeuten, dass ich viel Verdrahtung vornehme, was ich zu vermeiden versuche.

C# eers!

Antwort

1

Der beste Weg, dies zu tun, wäre ein Ereignis auf der Masterseite zu haben, zu dem die einzelnen Multiviews einen Event-Handler hinzufügen.

Das sollte nicht zu viel Code benötigen, und Sie könnten vermeiden, diesen Code zu duplizieren, indem Sie eine Basisklasse erstellen, die von MultiView für alle Ihre Instanzen erbt.

0

Eine weitere automatische Option (aber nicht so performant wie die von RobW) wäre, rekursiv auf die Steuerelemente der Seite für jede Multiview zu schauen. Etwas wie:

ApplyToControlsRecursive(Page, c => 
{ 
    var multi = c as System.Web.UI.WebControls.MultiView; 
    if (multi != null) 
     multi.ActiveViewIndex = 1; 
}); 
void ApplyToControlsRecursive(System.Web.UI.Control control, Action<System.Web.UI.Control> action) 
{ 
    action(control); 
    foreach (System.Web.UI.Control child in control.Controls) 
    { 
     ApplyToControlsRecursive(child, action); 
    } 
} 
Verwandte Themen