asp.net drop-down-menu google-chrome autopostback

Asp.Net, DropDownList, AutoPostBack y Google Chrome



drop-down-menu google-chrome (6)

Tengo una página simple asp.net (framework 3.5) y un UpdatePanel con una serie de listas desplegables que quiero rellenar asincrónicamente. Todo funciona bien en todos los principales navegadores (Opera, Safari, IE6, IE7, FF3), pero no en Chrome.

Chrome parece ignorar el evento SelectedIndexChanged que tuvo que realizar la solicitud de asincronización.

Alguien sabe una solución simple a esto? ¡Gracias!

EDITAR: Más información

Como le digo a Adam Lassek, la actualización del panel de actualización después de hacer clic en un botón asp: dentro de ella, pero no funciona con el evento desplegable SelectedIndexChanged .

El panel de actualización se establece como:

<asp:UpdatePanel ID="updPanel" runat="server" UpdateMode="Always" ChildrenAsTriggers="true">

sin Triggers especificados, y las sombras tienen sets AutoPostBack="true"

ACTUALIZACIÓN: (y retagging)

Después de algunos intentos, descubro que no es un problema del UpdatePanel, pero parece que el AutoPostback de los menús desplegables no funciona correctamente, incluso en páginas sin ScriptManager y UpdatePanel ... Estoy seguro de que es un problema concerniente solo a este proyecto, porque si comienzo un nuevo sitio web desde cero y replico la estructura de esto, funciona bien en Chrome ... Estoy tratando de eliminar paso a paso todas las otras cosas en el proyecto original para encontrar exactamente cuál es el problema.

Si alguien tiene algunas ideas mientras tanto ....


Esto sucede porque MicrosoftAjax.js detecta el navegador y detecta Chrome incorrectamente como Safari. Para solucionar esto, debe realizar los siguientes cambios:

Agregar un nuevo tipo de navegador

Sys.Browser = {}; Sys.Browser.InternetExplorer = {}; Sys.Browser.Firefox = {}; Sys.Browser.Safari = {}; Sys.Browser.Opera = {}; Sys.Browser.Chrome = {};

Actualice la lógica si-entonces para buscar Chrome

else if (navigator.userAgent.indexOf('' Firefox/'') > -1) { Sys.Browser.agent = Sys.Browser.Firefox; Sys.Browser.version = parseFloat(navigator.userAgent.match(/ Firefox//(/d+/./d+)/)[1]); Sys.Browser.name = ''Firefox''; Sys.Browser.hasDebuggerStatement = true; } else if (navigator.userAgent.indexOf('' Chrome/'') > -1) { Sys.Browser.agent = Sys.Browser.Chrome; Sys.Browser.version = parseFloat(navigator.userAgent.match(/ Chrome//(/d+/./d+)/)[1]); Sys.Browser.name = ''Chrome''; Sys.Browser.hasDebuggerStatement = true; } else if (navigator.userAgent.indexOf('' AppleWebKit/'') > -1) { Sys.Browser.agent = Sys.Browser.Safari; Sys.Browser.version = parseFloat(navigator.userAgent.match(/ AppleWebKit//(/d+(/./d+)?)/)[1]); Sys.Browser.name = ''Safari'';

Asegúrate de poner la verificación de Chrome antes de Safari. Si necesita ayuda para reemplazar el script del Framework con su versión personalizada, léelo .

ACTUALIZAR:

Creé una página de prueba y le puse los siguientes controles:

<asp:ScriptManager ID="scriptManager1" runat="server" /> <asp:UpdatePanel ID="panel1" runat="server" ChildrenAsTriggers="true"> <ContentTemplate> <asp:DropDownList ID="ddlTest" runat="server" AutoPostBack="true"> <asp:ListItem Value="0" Text="Item 1" /> <asp:ListItem Value="1" Text="Item 2" /> </asp:DropDownList> <asp:Literal ID="litTest" runat="server" /> </ContentTemplate> </asp:UpdatePanel>

Y escribió el siguiente código detrás:

protected override void OnInit(EventArgs e) { ddlTest.SelectedIndexChanged += new EventHandler(ddlTest_SelectedIndexChanged); base.OnInit(e); } void ddlTest_SelectedIndexChanged(object sender, EventArgs e) { litTest.Text = "Selected: " + ddlTest.SelectedItem.Text; }

El Updatepanel funciona bien en Chrome, sin modificación de la biblioteca Ajax. Entonces, creo que algo más está causando este problema. Necesitarás aislar la causa del problema mediante un proceso de eliminación. Comienza con algo simple como este ejemplo, y trabaja con lo que tienes por pieza a la vez.


Existe una incompatibilidad conocida con Ajax.NET y Chrome & Safari 3 .

Las pruebas pequeñas y rápidas pueden ser engañosas porque parece funcionar bien con la biblioteca Ajax.NET existente tal como está. Esto se debe a que se las arregla para realizar la primera solicitud de Ajax y falla cuando eso termina, por lo que solo cuando intentes realizar la segunda acción de Ajax notarás que ha fallado. Si coloca un control UpdateProgress en su página, notará que después de la primera solicitud su control UpdateProgress no desaparecerá.

Afortunadamente, hay una respuesta!

Recientemente hubo una gran publicación que detalla qué hacer y qué puedes encontrar aquí:

http://blog.turlov.com/2009/01/aspnet-ajax-compatibility-patch-for.html

La esencia general es que tanto Chrome como Safari 3 se informan a sí mismos como WebKit en sus cadenas userAgent.

Necesita agregar un poco de javascript para ayudar al framework Ajax.NET a reconocer los navegadores basados ​​en WebKit que se ve así:

if (typeof(Sys.Browser.WebKit) == "undefined") { Sys.Browser.WebKit = {}; } if (navigator.userAgent.indexOf("WebKit/") > -1 ) { Sys.Browser.agent = Sys.Browser.WebKit; Sys.Browser.version = parseFloat(navigator.userAgent.match(/WebKit//(/d+(/./d+)?)/)[1]); Sys.Browser.name = "WebKit"; }

Debe agregar eso a un archivo javascript y hacer referencia a él en su ScriptManager :

<asp:ScriptManager ID="ScriptManager1" runat="server"> <Scripts> <asp:ScriptReference Path="~/assets/javascript/WebKit.js" /> </Scripts> </asp:ScriptManager>

Tenga en cuenta que puede mantener el WebKit.js en un ensamblado y hacer referencia a eso utilizando una etiqueta ScriptReference similar a esta:

<asp:ScriptReference Assembly="Scripts" Name="Scripts.webkit.js" />

Una vez que hayas hecho todo eso, si es posible, deja de usar WebForms y Ajax.NET y usa MVC y jQuery :)


No es una sugerencia adecuada utilizar MVC y jQuery en lugar de WebForms y ASP.NET AJAX. Uno debe entender todos los pros y los contras de las tecnologías y los enfoques para elegir.

En primer lugar, MVC es un patrón de diseño y no tiene nada que ver con los marcos mencionados mencionados. Puede implementar fácilmente un patrón MVC con WebFroms. Hay muchas implementaciones diferentes de MVC para ASP.NET y WebForms.

En segundo lugar, jQuery, al ser una gran biblioteca de JavaScript, no permite ninguna integración ni aprovecha la funcionalidad ASP.NET del lado del servidor, a diferencia del marco ASP.NET AJAX que viene de serie con ASP.NET 3.5+ y utiliza ASP por completo. Funciones de NET, como el margen del lado del servidor, control de ScriptManager, combinación de scripts del lado del servidor, localización y globalización, etc.

En tercer lugar, jQuery se puede usar fácilmente junto con los marcos ASP.NET y ASP.NET AJAX mejorando así la programación del lado del cliente. Microsoft ha anunciado que jQuery se enviará con el próximo ASP.NET 4.0 y por ahora puede agregarlo a su proyecto manualmente.


Me encontré con un problema similar hoy (aunque no estaba usando Ajax), y encontré una solución. Vea el tercer comentario en esta publicación de blog .


Tengo el mismo problema. Tengo un menú desplegable dentro de una devolución de datos de Ajax y necesito hacer una actualización cuando cambie el índice seleccionado. También funciona con una página básica en un nuevo proyecto.

Después de agregar el script de Webkit mencionado en las otras respuestas, sigo teniendo el mismo problema y cuando ejecuto el depurador de javascript en Chrome obtengo este error:

excepción no detectada ReferenceError: evt no está definido

ACTUALIZACIÓN: SOLUCIÓN

Descubrí que en mi caso era un Custom Validator que estaba interfiriendo con el controlador de eventos. Establecer EnableClientScript como falso solucionó el problema.