Estoy probando las nuevas características de ASP.NET MVC 4 Mobile. Hice una aplicación simple con solo un controlador (HomeController) y una vista (índice). También agregué una versión móvil de la vista de índice.ASP.NET MVC 4 Mobile Características
Views/Home/Index.cshtml
Views/Home/Index.Mobile.cshtml
Al lanzar la aplicación en un navegador de escritorio se muestra la vista normal como se esperaba, sin embargo cuando inicio la aplicación en el Opera Mobile Emulator como un Galaxy S de Samsung, sigo teniendo la vista normal y no la versión móvil.
la cadena de agente de usuario enviado desde el emulador tiene el siguiente aspecto:
Opera/9.80 (Windows NT 6.1; Opera Mobi/23731; U; en) Presto/2.9.201 Version/11.50
¿Alguna idea de por qué esto no está funcionando?
actualización Gracias a @nemesv yo era capaz de resolver el problema, aquí está mi solución actual, es de esperar que cubrirá la mayoría de los escenarios móviles.
public class MobileDisplayMode : DefaultDisplayMode
{
private readonly StringCollection _useragenStringPartialIdentifiers = new StringCollection
{
"Android",
"Mobile",
"Opera Mobi",
"Samsung",
"HTC",
"Nokia",
"Ericsson",
"SonyEricsson",
"iPhone"
};
public MobileDisplayMode() : base("Mobile")
{
ContextCondition = (context => IsMobile(context.GetOverriddenUserAgent()));
}
private bool IsMobile(string useragentString)
{
return _useragenStringPartialIdentifiers.Cast<string>()
.Any(val => useragentString.IndexOf(val, StringComparison.InvariantCultureIgnoreCase) >= 0);
}
}
Y i Global.asax
DisplayModeProvider.Instance.Modes.Insert(0, new MobileDisplayMode());
salvavidas. es realmente estúpido que el tutorial no diga esto. Se siente tan medio asno desde el lado de Microsoft. Usualmente están a punto con sus tutoriales. –
Gracias, aunque StringCollection parece ser una de las clases más inútiles de la historia. No solo no ofrece nada en este ejemplo de código, ni en el rendimiento, debe escribir código adicional (Cast) por el placer de usarlo. Reemplazarlo con la lista y vivir felizmente después de –
PandaWood