Estoy intentando llamar manualmente a la función de devolución de JavaScript ASP.NET (3.5) __doPostBack
desde mi código de JavaScript. El problema es que el bloque de script de devolución de datos, que normalmente se procesa justo después del comienzo de la etiqueta <form>
(y los campos ocultos), se representa ocasionalmente cerca de la etiqueta de cierre </form>
.ASP.NET __doPostBack procesado después de comenzar o cerca del final de la etiqueta de formulario
¿Hay alguna manera de forzar que se represente cerca del principio de la etiqueta del formulario? Además, ¿cómo decide ASP.NET cuándo/dónde renderizar el bloque de script del cliente de devolución de datos?
Editar> Información adicional: el código Javascript reside dentro de un control de usuario que hace referencia a la función __doPostBack
. El control en sí mismo no contiene ningún 'control de devolución de datos' que pueda llamar a esa función. (Cuando menciono 'controles de devolución', me refiero a los controles ASP.NET que llaman a la función __doPostBack
y no asp.net ImageButton
y Button
controles)
Sobre la base de lo que he observado y @ comentario de Brian en la dependencia de el script de devolución de datos sobre la disponibilidad de 'controles de devolución de datos' en la página, descubrí que cuando la página contiene controles que provocan la devolución de datos, el bloque de script __doPostBack se representa después de la etiqueta de apertura <form>
y cuando no hay ninguno, los renderiza cerca la etiqueta de cierre </form>
(o según this ni siquiera se supone que se represente). Ahora tendría sentido para ASP.NET no renderizar el script de devolución de datos si no hay controles que lo requieran, pero la posición aparente del script cerca de la etiqueta de cierre es la que aún me elude. No he podido encontrar ninguna documentación que sugiera este comportamiento. Todo lo que he podido encontrar fue this.
Dicho esto, he encontrado un par de maneras de evitar este problema:
- agrega un 'control de devolución de datos' y su visibilidad se establece oculta a través de CSS (no la propiedad visible). p.ej.
<asp:LinkButton ID="RequirePostBackScriptLink" runat="server" style="display:none;" />
(esto es lo que estoy usando) - Agregue el control al
Page.RegisterRequiresPostBack
e implemente la interfazIPostBackDataHandler
.
Por último, como @Jonathan_Bates mencionan en su puesto, lo más apropiado que hacer es envolver la referencia a __doPostBack
dentro de una función que es un controlador de eventos para load
(o ready
si estás usando jQuery). De esta forma, no habría necesidad de depender de la ubicación real del script __doPostBack
.
Sería genial si alguien puede proporcionar más información sobre este comportamiento, ya mencionado.
Sí, esto es para un control que tiene una secuencia de comandos que básicamente "secuestra" la función predeterminada __doPostBack y luego llama a la devolución de datos a través de una devolución de llamada. Pero tiene razón, depende de si hay algún 'control de devolución' (excluyendo los controles del botón ImageButton y asp.net, ya que usan un envío y una publicación normales en la misma página). Lo que he observado es que si la página no tiene ningún 'control de devolución de datos', el bloque de script se representa cerca de la etiqueta de cierre del formulario (o de lo que he leído, no renderizado). Estoy buscando documentación para validar esta observación. –