Pregunta

Supongamos que tiene varias partes web, una como controlador y varias que toman información del controlador y actúan sobre él. Esto es bastante fácil de modelar utilizando la interfaz Consumidor / Productor introducida en ASP 2.0.

¿Cómo podría agregar interacciones al revés mientras sigue manteniendo lo anterior?

Un ejemplo simple sería: el usuario ingresa información en la parte web A, que realiza una búsqueda y los resultados se mostrarán en la parte web B. La parte web C le permite filtrar los resultados que deberían hacer que la parte web A vuelva a enviar la consulta y Por lo tanto, actualice los resultados en B.

Parece que no es posible hacerlo en WSS 3.0 porque solo se permite que se use 1 interfaz en todas las conexiones al mismo tiempo.

¿Esto tiene sentido? :-)

¿Fue útil?

Solución

Una solución rápida y sucia para habilitar la comunicación de control arbitrario es utilizar el control de búsqueda recursiva y los eventos. Haga que los controles busquen el árbol de control por tipo de control para lo que necesitan y luego se suscriban a eventos expuestos públicamente en el control de publicación.

Anteriormente he usado el truco para permitir que los controles de servidor estándar se encuentren entre sí cuando están integrados en sistemas CMS de diferentes proveedores para evitar por completo una API de comunicación específica.

Otros consejos

No veo nada malo en que la parte web A obtenga una referencia a la parte web B y que llame a los métodos / propiedades públicas / internas o que suscriba los controladores a eventos públicos / internos. Un punto de mención al hacer esto, sin embargo: AseguraChildControls. He visto con mis propios ojos que una parte web se está ejecutando de forma clara para PreRender mientras que otra parte web ni siquiera ha ejecutado CreateChildControls.

Desde la parte web A, obtenga su referencia a la parte web B (en este caso, la parte web B es de tipo Calendario), de este 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;
      }
    }

Ahora puede hacer cosas como recuperar algunos datos nuevos y actualizar el calendario de la siguiente manera:

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

O tal vez deje que webpart A arroje una referencia a sí mismo a webpart B para que pueda usar las propiedades públicas / internas de webpart A para ir a buscar datos por sí mismo:

CalendarWP.UseWPAToFetchData(this);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top