2010-08-18 12 views
5

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:

  1. 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)
  2. Agregue el control al Page.RegisterRequiresPostBack e implemente la interfaz IPostBackDataHandler.

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.

Respuesta

0

Parte de ella es controlado por los controles que hacen, mientras que la página inyecta los bloques de script cliente y scripts de inicio en un punto predefinido ...

Supongo que esto es para un control o algo? Esto no es para un bloque estándar?

+0

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. –

2

Supongo que su representación es importante para usted, de modo que sus scripts la procesen y puedan invocarla (lo que me permite decir desde el principio, es una mala idea para empezar).

Solo necesita asegurarse de que cualquier script que use para llamar al __doPostBack lo llame después de haber sido leído en el navegador.Si utiliza una biblioteca como jQuery y su convención $(document).ready(), puede estar seguro de que su código no se ejecutará hasta que se cargue el resto del código y, por lo tanto, su código podrá llamar al __doPostBack.

+0

Envolver la referencia a la función de devolución de datos en un ámbito de función del manejador como sugirió mediante el evento jquery ready definitivamente sería la ruta adecuada, pero estoy tratando de entender la lógica de ASP.NET detrás de la representación del bloque predeterminado de script __doPostBack . –

Cuestiones relacionadas