Domanda

Supponi di avere diverse webpart, una come controller e diverse che prendono informazioni dal controller e agiscono su di esse. Questo è abbastanza facile da modellare usando l'interfaccia Consumer / Producer introdotta in ASP 2.0.

Come saresti in grado di aggiungere interazioni viceversa mantenendo comunque quanto sopra?

Un semplice esempio potrebbe essere: l'utente inserisce informazioni nella webpart A che esegue una ricerca e i risultati verranno visualizzati nella webpart B. Webpart C consente di filtrare i risultati che dovrebbero attivare la webpart A per inviare nuovamente la query e quindi aggiorna i risultati in B.

Non sembra possibile farlo in WSS 3.0 perché è consentito utilizzare 1 sola interfaccia in tutte le connessioni alla volta.

Ha persino senso? : -)

È stato utile?

Soluzione

Una soluzione rapida e sporca per abilitare la comunicazione di controllo arbitraria consiste nell'utilizzare il controllo e gli eventi di ricerca ricorsivi. Chiedi ai controlli di cercare nella struttura di controllo per tipo di controllo ciò di cui hanno bisogno e quindi iscriviti agli eventi esposti pubblicamente sul controllo di pubblicazione.

In precedenza ho usato il trucco per consentire ai controlli server standard di trovarsi l'un l'altro quando sono integrati in sistemi CMS di diversi fornitori per evitare del tutto una specifica API di comunicazione.

Altri suggerimenti

Non vedo nulla di male con la webpart A che ottiene un riferimento alla webpart B e chiama metodi / proprietà pubblici / interni o sottoscrive gestori a eventi pubblici / interni. Un punto di menzione nel fare questo però: AssicurareChildControls. Ho visto con i miei occhi che una webpart veniva eseguita in chiaro su PreRender mentre un'altra webpart non aveva nemmeno eseguito CreateChildControls.

Dalla webpart A, recupera il riferimento alla webpart B (in questo caso la webpart B è di tipo Calendario) in questo modo:

     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;
      }
    }

Ora puoi fare cose come recuperare alcuni nuovi dati e aggiornare il Calendario in questo modo:

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

O forse lascia che la webpart A passi un riferimento a se stessa sulla webpart B in modo che possa usare le proprietà pubbliche / interne della webpart A per recuperare i dati per sé:

CalendarWP.UseWPAToFetchData(this);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top