2012-05-08 17 views
17

Estoy utilizando la nueva ASP.NET MVC 4 beta y estoy tratando de crear un sistema que funcione principalmente con diseño receptivo, pero para una vista específica estoy usando una vista móvil para representar una vista específica para dispositivos móviles.¿Por qué las vistas móviles en ASP.NET MVC se muestran de forma diferente en diferentes servidores?

Mi estructura es simplemente que tengo un Show.cshtml y después tengo un Show.mobile.cshtml.

Si hago mi sitio disponible desde mi máquina de desarrollo a través de IIS Express, esta vista se muestra correctamente para iPad, iPhone, teléfonos Android y Opera móvil, y también funciona igual si hago una publicación local en IIS 7.5 en mi desarrollador máquina.

El problema surge cuando implementamos en un servidor activo, hemos intentado implementarlo en dos servidores diferentes. Entonces, la vista móvil solo se servirá en iPhones, no en otros dispositivos móviles. Esto es consistentemente así. Nuestros servidores configurados han sido Windows 2003/IIS6 y Windows 2008 R2/IIS7.5 y funciona igual en ambos, solo el iPhone recibe la vista móvil.

¿Cuál es la causa de esto?

No he agregado nada personalizado en global.asax para esto.

ACTUALIZACIÓN

Después de algunas investigaciones más parece claro que el comportamiento predeterminado de DisplayMode y vistas móviles depende de la bandera Request.Browser.IsMobileDevice. Este indicador a su vez parece depender de los archivos .browser que se encuentran en la carpeta Config/Browsers de la carpeta .NET Framework.

En mi máquina de desarrollo tengo diferentes archivos .browser que aquellos que están presentes en los servidores en los que he implementado. Hasta ahora he intentado desplegar los que tengo en mi máquina en la carpeta App_Browsers de la aplicación web, pero eso no solucionó mi problema. ¿Podría ser este el camino a seguir?

+0

¿usted ha intentado escupir su cadena de agente de usuario? Me pregunto si IIS está jugando con eso o resolviéndolo de manera diferente. –

+2

Me parece que la instancia predeterminada de DisplayMode depende de los navegadores definidos en la carpeta Config \ Browsers de la carpeta framework. Algunas investigaciones más muestran que estos difieren en las diferentes máquinas. ¿Es esto algo que se actualiza a través de Wep Plattform Installer? – Cros

Respuesta

6

Esta no es una respuesta completa a su pregunta, pero creo que todavía ayudará.

ASP.NET no es muy bueno resolviendo las capacidades del navegador en mi experiencia. Por lo tanto, puedo recomendar mirar en 51Degrees.Mobi Foundation. Steven Sanderson tiene un buen blog el que:

Using 51Degrees.Mobi Foundation for accurate mobile browser detection on ASP.NET MVC 3

No estoy completamente seguro, pero debe ser capaz de conectar esto con facilidad a la infraestructura de ASP.NET MVC 4 DisplayMode. Aquí es un buen recurso en el que:

51Degrees.mobi and MVC4

+1

He decidido tomar esta ruta, pero creo que no es una respuesta completa a mi pregunta. Los 51 grados parecen resolver el dispositivo IsMobile mucho mejor que la implementación predeterminada, así que lo usaré por el momento. – Cros

+0

@Cros sí, no es una respuesta completa a su pregunta, como también indiqué. – tugberk

0

pensé que la solución que di a continuación era la respuesta (que trabajó durante un breve momento), pero todavía conmuta a la visualización incorrecta después de un tiempo.

Al igual que el resto de Internet, he instalado 51 Degrees from Nuget esto está funcionando perfectamente, y es muy fácil de configurar


(La continuación no funciona para mí, pero tal vez lo hace por usted) http://www.nuget.org/packages/Microsoft.AspNet.Mvc.FixedDisplayModes

parece que es un error conocido: http://aspnetwebstack.codeplex.com/workitem/280?PendingVoteId=280

Según enlace CodePlex anterior, recuerde que debe asegurarse de esto:

Para un pequeño conjunto de proyectos que personalizan la lista de motores registrados vista (por ejemplo, en Global.asax) debe asegurarse de que usted está haciendo referencia Microsoft.Web.Mvc.FixedRazorViewEngine o Microsoft. Web.Mvc.FixedWebFormViewEngine, en lugar de las clases que barco en el tiempo de ejecución del núcleo binario

Cuestiones relacionadas