Pregunta

¿Qué opciones tengo para crear contenido dinámico con estado en un sitio web ASP.Net?

Este es mi escenario.Tengo un sitio que tiene varias regiones de contenido anidadas.El nivel superior son acciones ligadas a un área funcional. Catalog, Subscriptions, Settings.

Cuando haces clic en la acción funcional, quiero agregar dinámicamente contenido específico a esa acción.Por ejemplo, cuando se hace clic en Catálogo, quiero mostrar un árbol con las carpetas y archivos del catálogo, y una región a la derecha para obtener más detalles.

Cuando un usuario hace clic en el árbol, quiero que se carguen detalles sensibles al contexto en la región de detalles (como propiedades u opciones para administrar los archivos).


Empecé con UserControls.Funcionaron bien siempre y cuando siguiera cargando todo en la página y nunca dejara que ninguno desapareciera.Tan pronto como uno desapareció, ViewState La página explotó porque el árbol de estado de la vista no era válido.

(No quería seguir cargando cosas en mi página porque no quiero que las respuestas sean demasiado grandes)

Entonces, mi siguiente enfoque fue reemplazar mis regiones dinámicas con IFrames.Entonces, en lugar de crear una instancia de un UserControl, simplemente cambiaría la fuente en mi IFrame.Dado que el contenido del IFrames eran paginas independientes no me tope con ninguna ViewState problemas.

Pero me preocupa que IFrames Puede ser una mala elección de diseño, pero no entiendo completamente por qué.El sitio no es público, por lo que los motores de búsqueda no son una preocupación.


Entonces, finalmente a mi pregunta.

¿Cuáles son mis opciones para este escenario?Si elijo una solución Ajax (jQuery), ¿tendré que mantener mi propio ViewState?¿Hay alguna otra consideración que deba tener en cuenta?

¿Fue útil?

Solución

Algunas otras opciones:

  1. Solo contenido aparece ser dinámico.Carga suficientes controles en la página para manejar cualquier cosa y solo en realidad espectáculo Que necesitas.Esto ahorra muchos problemas con el estado de la vista y demás, pero significa que su página tiene una huella más grande.
  2. Agregue controles a la página de forma dinámica.Ya has estado jugando con esto, así que has visto algunos de los problemas aquí.Sólo recuerde que el lugar para crear sus controles dinámicos para las devoluciones de datos es en el evento Page_Init(), y que si desea que tengan estado, debe mantener ese estado en algún lugar.Recomiendo una base de datos.

Otros consejos

Los controles que se agregan dinámicamente no persisten en el estado de visualización, y esta es la razón por la que no importa si usa AJAX o iframes o lo que sea.

Una posible solución es volver a completar los controles en la devolución de datos.El problema con esto es que el ciclo de vida de la página (simplificado) es:

  1. Inicializar
    • Estado de vista de carga
    • Cargar datos de devolución
    • Control de llamadas Cargar eventos
    • Evento de carga de llamada
    • Eventos de control de llamadas
    • Controlar el renderizado previo
    • Prerenderizado
    • GuardarVerEstado
    • Descargar

Lo que esto significa es que el único lugar para volver a agregar sus controles dinámicos es Inicializar; de lo contrario, los datos publicados (o la información del estado de visualización) no se cargan en ese control.Pero a menudo, debido a que los datos de Viewstat/postback aún no están disponibles en Inicializar, su código no tiene la información que necesita para determinar qué controles deben agregarse.

La única otra solución que he encontrado en esta situación es utilizar un control de terceros llamado Controles dinámicosMarcador de posición.Esto funciona bastante bien y conserva la información de control en viewstate.


En su caso particular, no parece que haya tantas opciones/casos.¿Es práctico tener todos los diferentes conjuntos de controles en la página y colocarlos dentro de asp:controles de marcador de posición y luego configurar uno como visible, dependiendo de lo que se seleccione?

tienes varias opciones diferentes y sí, los IFrames fueron una mala elección de diseño.

La primera opción es la solución AJAX.Y con eso no hay realmente un escenario de estado de visualización, simplemente estás pasando datos de un lado a otro con el servidor web, creando la interfaz de usuario sobre la marcha según sea necesario.

La siguiente opción es agregar dinámicamente los controles que necesita para una publicación determinada, en todo momento.La forma en que esto funcionaría es que al comienzo del ciclo de vida de la página, necesitaría reconstruir la página exactamente como se envió la última vez y luego eliminar todos los controles innecesarios y crear solo aquellos que desee. .

Una tercera opción sería utilizar páginas maestras.Su contenido de nivel superior podría estar en la página maestra y tener enlaces a varias páginas dentro del sitio web.

Estoy seguro de que, si tuviera suficiente tiempo, podría encontrar más, pero estos 3 aparecieron simplemente leyendo su problema.

Los controles dinámicos y el estado de visualización no se combinan bien, como se señaló anteriormente, pero eso es algo bueno, porque incluso si lo hicieran, el estado de visualización de una página dinámica compleja se inflaría tanto que el rendimiento disminuiría a cero.

use Ajax [me gusta AJAX PRO porque es muy simple de usar] y administre el estado de la página usted mismo [en sesiones, tablas de bases de datos o lo que sea que funcione para su escenario].Será un poco más complicado ponerlo en marcha, pero los resultados serán eficientes y receptivos:cada página puede actualizar solo lo que necesita cambiar, y no tendrás que hacer volar una cadena de estado de vista gigante de un lado a otro todo el tiempo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top