asp.net/ajax de control con plantilla personalizada, mostrar / ocultar elementos con marcador de posición

StackOverflow https://stackoverflow.com/questions/1706705

Pregunta

Tengo un control personalizado con plantilla (barra de herramientas) que contiene un control de usuario personalizado (botón) El botón utiliza jQuery para el estilo y gestionar los estados / devoluciones de datos / no = devoluciones de datos, etc.

Algunos de los botones están ocultos con un marcador de posición y se muestran al golpear uno de los botones.

Todos los botones con respecto jQuery parecen ser iniciado en la devolución de datos (estilo ajax dentro de un UpdatePanel mediante el PageRequestManager) sin embargo, el estado de vista se pierde en los botones invisibles hechas por el marcador de posición.

Parece ser un problema es específico para el estado de vista y botones en el marcador de posición en el control de plantilla. Esto normalmente funciona en un entorno no-Ajax, sospecho que me falta algo.

Cualquier comentario que consiguió que pensaba apreciado.

El código se encuentra en varias partes y, probablemente, no vale la pena pegar, ya que será completamente desconectado (sé que esto no ayuda)

¿Fue útil?

Solución

Me siento la necesidad de responder a mi propia pregunta aquí:

En lugar de utilizar marcadores de posición o divs con CSS, UpdatePanels son prestados en cualquiera de un div o de un periodo en función de la opción de renderizado. En este caso simplemente ocultar la div o lapso que el UpdatePanel crea en lugar de tratar de ocultar / mostrar un nuevo envase exterior.

Otros consejos

Si no recuerdo mal, los controles ASP.NET no terminar su ciclo de vida si tienen conjunto visible en false. Es decir, las cosas como Render () no son llamados, y ViewState deben ser una de esas cosas (que tiene sentido). El uso de paneles de actualización junto con AJAX / Javascript es también una cosa muy difícil, y no funciona muy bien. Esto es sólo la forma en ASP.NET controles y los trabajos panel de actualización.

Mi sugerencia es para cualquiera que use paneles de actualización, o bien el uso de JavaScript, y no tanto.

Puede emular p.ej. sobre paneles de actualización de hacer mediante el uso de jQuery $ .post / GET y la sustitución de una sección de código con el HTML devuelto desde una llamada de servicio web.

function myButtonClick(event){
    $.post("path/to/webservice", {data1: "data1"}, function(data, status){
        $("#myPanel").replaceWith(data);
    });
}

Es muy probable que ejecutar en otros temas también, si usted tiene un JS unido al código que se actualiza a través de un panel de actualización. Ejemplo: Si usted tiene una lista de elementos que tienen cada uno JS unidos a ellos, como uno de los controles ASP.NET AJAX Control Toolkit, y se elimina uno de estos desde la página utilizando un panel de actualización, el JS utilizado para conectar el controla hasta estará fuera de sincronización.

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