He creado una página que combina un jQuery UI datepicker en línea. Quiero iniciar una devolución de llamada al panel de actualización cuando el usuario hace clic en una nueva fecha para actualizar algunos datos. Ahora, esta página tiene varios paneles de actualización (no preguntes :)), así que necesito verificar qué panel de actualización recargó para hacer algunas cosas al lado del cliente. Estoy usando __doPostBack
para hacer la devolución de datos y Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function(sender, args) {}
para escuchar cuando se realiza una actualización.Error extraño al combinar un panel de actualización de ASP.NET con jQuery UI DatePicker
El problema es que en el FF la devolución de llamada me dice que no se trata de una operación asincrónica, y los datos que necesito para verificar qué panel de actualización hizo que la actualización sea nula.
Mi problema es que esto funciona bien en IE, pero no en ningún otro navegador, lo que podría deberse a dos cosas: IE entra en un modo raro que resuelve el problema (esto es lo que creo) o que IE tiene algunos tipo de soporte nativo para el panel de actualización que otros navegadores no.
He reducido el problema, y produjo un testpage:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Test</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js "></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js "></script>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server" />
<script type="text/javascript">
function doAspNetPostback() {
__doPostBack('<%= hiddenOnSelectionChangedButton.ClientID %>', '');
}
$(document).ready(function() {
/* Create the datepicker */
buildDatepicker();
/* Add callback-method for when the scriptmanager finished a request */
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function(sender, args) {
/* Show the panelID - This is 'upd1|hiddenOnSelectionChangedButton' in IE as it should be, and null in Chrome/FF */
alert(sender._postBackSettings.panelID);
});
});
function buildDatepicker() {
var dp = $("#datepicker").datepicker({
onSelect: function(dateText, inst) {
/* Do a postback when someone clicks a date */
doAspNetPostback();
}
});
}
</script>
<div id="datepicker">
</div>
<asp:UpdatePanel UpdateMode="Conditional" ID="upd1" runat="server">
<ContentTemplate>
<asp:Button ID="hiddenOnSelectionChangedButton" Text="Press me" runat="server" />
<div id="lala" runat="server">
Upd1
</div>
</ContentTemplate>
</asp:UpdatePanel>
</form>
</body>
</html>
Firing este testpage en IE dará lugar a un cuadro de mensaje que muestra lo que se supone que, mientras se carga, en los resultados de FF o Chrome en un messagebox que dice "null" :)
He intentado todo tipo de cosas, pero no estoy seguro de lo que podría causar este comportamiento, ya que no soy tan profundo en el funcionamiento interno de jQuery o ASP .NET Ajax. Sin embargo, si paso por el código en FireBug lo suficientemente lento ... ¿Qué me lleva a pensar que podría ser un problema con la interoperabilidad entre las devoluciones de llamada de jQuery y las devoluciones de llamada Ajax de ASP.NET?
Cualquier ayuda o idea será muy apreciada.
Gracias.
[ACTUALIZACIÓN] Tim lo resolvió! ¡Muchas gracias! - También gracias a todos los que pasaron su tiempo tratando de resolver esto :)
Esto funciona. Simple y genial :) ¡Muchas gracias! – cwap