2011-09-01 6 views
5

Tengo una página sencilla, su estructura es la siguiente (pseudo código):UIWebView y iPhone contenido no devolución de datos (ASP.NET problemas con el navegador de capacidad)

<aspx page> 
    <ascx control> 
     <asp:dropdownlist id="dd1" autoPostback=true /> 
     <asp:dropdownlist id="dd2" /> 
    </ascx control> 
</aspx page> 

en cualquier navegador de escritorio, mensajes de ida y DD1 el evento del servidor "SelectedIndexChanged" se activa. Sin embargo, en el safari de iPhone o en la vista web de un iPhone, no se realiza ninguna devolución de datos. Lo sé porque no se muestra ningún indicador de actividad de red y he conectado un depurador al sitio que capta todos los eventos del lado del servidor y nunca se golpea. A veces, aproximadamente una vez cada 2 horas, la devolución de datos SI FUNCIONA en el iPhone, pero muy rara vez e intermitentemente.

Dd1 es un menú desplegable de fecha que carga un menú desplegable de intervalo de tiempo que depende del elemento seleccionado en el menú desplegable de fecha. Esta forma se reutiliza en muchos lugares y no quiero cambiar la estructura básica a menos que sea un último esfuerzo.

Javascript está habilitado en configuraciones de safari.

Bastante simple ¿no? Estoy intentando descubrir cómo depurar errores de JavaScript en una vista web, pero me preguntaba si alguien sabía qué rareza había creado este comportamiento.

Respuesta

7

El agente de usuario de IPhones UIWebView no fue reconocido por ASP.NET 4.0, por lo que asp.net sirvió como opción predeterminada, la versión de nivel inferior de la página que no incluía javascript. El agente de usuario vistaweb iphones era:

Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_5 como Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Mobile/8L1

Para evitar que eso sucediera, cambié la propiedad "ClientTarget" de la página a "UpLevel", que elude asp.net tratando de descubrir las capacidades del navegador y solo sirve una versión "Uplevel" javascript y todo.

Solución en Page_Load de mi Página:

Me.ClientTarget = "alta gama"

o

this.ClientTarget = "alta gama";

+1

Esto es un truco. Es más limpio arreglar App_Browsers o actualizar la lista global de navegadores. Consulte la solución alternativa publicada por pravav rastogi (funciona para Microsoft) en http://connect.microsoft.com/VisualStudio/feedback/details/631438 – Brian

+0

En los comentarios en ese enlace alguien menciona que la solución se lanzará en el próximo tiempo de ejecución de asp.net lanzamiento ... ¿esto está arreglado en .net 4.5? –

+0

Lo siento, pero no sé. Podría intentar instalarlo y ver si la copia de la máquina del archivo del navegador está actualizada. Ejecute un diff en '\ Windows \ Microsoft.NET \ Framework [X1] \ v [X2] \ Config \ Browsers \ *'. – Brian

Cuestiones relacionadas