ASP.NET MVC 4 Fonctionnalités Mobiles
Je suis à essayer les nouvelles ASP.NET MVC 4 Fonctionnalités Mobiles. J'ai fait une application simple avec un seul contrôleur HomeController) et d'un point de vue (Index). J'ai également ajouté une version mobile de la vue index.
Views/Home/Index.cshtml
Views/Home/Index.Mobile.cshtml
Lors du lancement de l'application dans un navigateur de bureau, l'affichage normal est indiqué comme prévu, cependant lorsque je lance l'application dans le Opera Mobile Emulator qu'un Samsung Galaxy S, j'ai toujours l'affichage normal et pas la version mobile.
la chaîne de l'agent utilisateur envoyés à partir de l'émulateur ressemble à ceci:
Opera/9.80 (Windows NT 6.1; Opera Mobi/23731; U; en) Presto/2.9.201 Version/11.50
Aucune idée de pourquoi cela ne fonctionne pas?
Mise à jour
Grâce à @nemesv j'ai été en mesure de résoudre le problème, ici, c'est ma solution actuelle, nous espérons qu'il couvre la plus grande partie mobile scénarios.
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);
}
}
Et j'ai Mondiale.asax
DisplayModeProvider.Instance.Modes.Insert(0, new MobileDisplayMode());
- la vie de veille. sa fait stupide que le tutoriel ne dis pas cela. Il se sent juste la moitié cul de microsoft côté. Généralement, ils sont sur le point avec leurs tutoriels.
- Merci, si StringCollection semble être l'un des plus inutiles les classes jamais. Non seulement offre-t-il rien dans cet exemple de code, ni les performances, vous devez écrire du code supplémentaire (Cast<string>) pour le plaisir de l'utiliser. La remplacer par une Liste<string>, et vivre heureux pour toujours
Vous devez vous connecter pour publier un commentaire.
ASP.Net (en fait, les
HttpBrowserCapabilitiesBase
classe) ne reconnaît pas le Opera Mobile Emulator comme un navigateur Mobile.Vous pouvez vérifier cela dans n'importe quel contrôleur de l'action:
HttpContext.Request.Browser.IsMobileDevice
sera de retourfalse
pour le navigateur Mobile Opera.Parce que le construit en
DefaultDisplayMode
utilise la méthode suivante pour vérifier les navigateurs mobiles, vous devez enregistrer votre propreDisplayMode
qui reconnaît correctement Opera Mobile.Pour ce faire, vous devez ajouter au Mondial.asax
Application_Start
:une solution pour tous les mobiles sans avoir besoin de spécifier tous les noms de navigateur sera comme ceci...