Frage

Angenommen, Sie mehr webparts haben, eine als Controller und mehrere, die auf sie Informationen von der Steuerung und zu handeln nehmen. Das ist ziemlich einfach, in ASP 2.0 eingeführt mit der Consumer / Producer-Schnittstelle zu modellieren.

Wie werden Sie in der Lage sein, Wechselwirkungen in die andere Richtung hinzuzufügen, um während immer noch den oben beibehalten?

Ein einfaches Beispiel wäre: der Benutzer gibt Informationen in webpart A, die auf webpart angezeigt würde eine Suche und die Ergebnisse führt B. Webpart C ermöglicht es Ihnen, die Ergebnisse zu filtern, die webpart A die Abfrage erneut vorlegen auslösen soll und aktualisiert damit die Ergebnisse in B.

Es scheint nicht möglich, in WSS 3.0 zu tun, weil Sie nur 1 Schnittstelle in alle Verbindungen zu einem beliebigen Zeitpunkt verwendet werden dürfen.

Ist dies noch sinnvoll? : -)

War es hilfreich?

Lösung

Eine schnelle und schmutzige Lösung willkürliche Kontrolle Kommunikation ermöglichen wird rekursiv finden Kontrolle und Ereignisse zu verwenden. die Kontrollen haben den Steuerbaum von Steuerart für die Suche, was sie brauchen und dann abonnieren öffentlich ausgesetzt Ereignisse auf der Verlag Kontrolle.

Ich habe den Trick bisherigen Standard-Server-Steuerelemente zu ermöglichen, einander zu finden, wenn sie in CMS-Systeme von verschiedenen Anbietern eingebettet vollständig eine spezifische Kommunikations-API zu vermeiden.

Andere Tipps

Ich sehe nichts falsch mit webpart A einen Referenz-B und Aufruf public / interne Methoden / Eigenschaften oder abonnieren Handler public / interne Ereignisse webpart. Ein Punkt erwähnen dabei ist aber: EnsureChildControls. Ich habe mit meinen eigenen Augen ein Zeuge webpart zu PreRender laufen wird klar, während ein anderer webpart nicht einmal Create gelaufen war.

Von webpart A, holt Ihre Referenz B webpart (in diesem Fall webpart B ist vom Typ Kalender) wie folgt:

     private Calendar _calendarWP = null;
    public Calendar CalendarWP
    {
      get
      {
          if (_calendarWP != null)
              return _calendarWP;
          else
              foreach (System.Web.UI.WebControls.WebParts.WebPartZone zone in this.WebPartManager.Zones)
                  foreach (System.Web.UI.WebControls.WebParts.WebPart webpart in zone.WebParts)
                      if (webpart is Calendar)
                      {
                          _calendarWP = (Calendar)webpart;
                          _calendarWP.EnsureChildControls();
                          return _calendarWP;
                      }
          return null;
      }
    }

Jetzt können Sie Dinge tun, wie einige neue Daten holen und den Kalender aktualisieren, wie so:

         IEnumerable newData = SomeDataProvider.GetNewData(args);
        CalendarWP.someGridView.DataSource = newData;
        CalendarWP.someGridView.DataBind();

Oder vielleicht webpart A lassen einen Verweis auf sich selbst über webpart B werfen, so dass es webpart A öffentlichen / interne Eigenschaften verwenden können, gehen Daten holen für sich:

CalendarWP.UseWPAToFetchData(this);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top