Mobile modes d'affichage dans l'ASP.NET MVC 4 arrêtez de servir la bonne vue après environ une heure de temps de fonctionnement, en dépit de navigateur remplace correctement détecter un substituée appareil mobile.
Le recyclage de l'application de la piscine résout temporairement le problème.
Le nouveau navigateur fonctionnalité de remplacement correctement permet aux périphériques mobiles pour afficher la version complète d'un site, et vice-versa. Mais après environ une heure de temps de fonctionnement, les affichages mobiles ne sont plus rendus pour un appareil mobile; seul le bureau par défaut de Rasoir modèles sont rendus. La seule solution est de recycler le pool d'applications.
Étrangement, le navigateur remplacer cookie continue à fonctionner. Un maître - _Layout.cshtml
modèle de montre correctement "mobile" ou "bureau" du texte en fonction de la valeur de ViewContext.HttpContext.GetOverriddenBrowser().IsMobileDevice
, mais le mal vues sont toujours en cours de rendu. Cela m'amène à croire que le problème se trouve avec le DisplayModes.
L'action en question n'est pas mis en cache:
[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
Je suis à l'aide de 51Degrees pour mobile de détection, mais je ne pense pas que cela devrait se répercuter sur le substituée mobile de détection. Est-ce un bug DisplayModes
fonctionnalité pour ASP.NET MVC 4 Beta & Developer Preview, ou suis-je en train de faire quelque chose de mal?
Voici mon DisplayModes
d'installation en Application_Start
:
DisplayModeProvider.Instance.Modes.Insert(0, new DefaultDisplayMode("iPhone")
{
ContextCondition = context =>
context.GetOverriddenBrowser().IsMobileDevice
&& (context.Request.UserAgent.IndexOf("iPhone", StringComparison.OrdinalIgnoreCase) >= 0
|| context.Request.UserAgent.IndexOf("Android", StringComparison.OrdinalIgnoreCase) >= 0
|| !context.Request.Browser.IsMobileDevice)
});
/* Looks complicated, but renders Home.iPhone.cshtml if the overriding browser is
mobile or if the "real" browser is on an iPhone or Android. This falls through
to the next instance Home.Mobile.cshtml for more basic phones like BlackBerry.
*/
DisplayModeProvider.Instance.Modes.Insert(1, new DefaultDisplayMode("Mobile")
{
ContextCondition = context =>
context.GetOverriddenBrowser().IsMobileDevice
});