2011-03-08 2 views
44

Je développe une application .NET MVC3.Comment détecter un navigateur mobile dans une application .NET MVC3

Y at-il un bon moyen de détecter si l'utilisateur utilise un navigateur mobile dans la vue (en utilisant RAZOR). Je veux différer la logique d'affichage si c'est un navigateur mobile.

Merci! MVC3 expose un indicateur IsMobileDevice dans l'objet Request.Browser.

+4

Vous voudrez peut-être envisager de le faire au niveau du contrôleur et en variant la vue réelle renvoyée. –

+1

Bon point. Je suppose que cela dépend de l'ampleur des changements. Si c'est juste d'inclure un fichier css différent, cela devrait être fait dans la vue. Si c'est un point de vue complètement différent, il serait bon de les garder complètement séparés. Merci pour la contribution. – Dave

Répondre

69

Ainsi, dans votre code de rasoir, vous pouvez interroger cette variable et la restituer en conséquence.

Par exemple, dans votre vue (rasoir):

@if (Request.Browser.IsMobileDevice) { 
    <!-- HTML here for mobile device --> 
} else { 
    <!-- HTML for desktop device --> 
} 
+1

Down-voté - cela ne fonctionne vraiment pas du tout. –

+14

bien sûr. Je l'utilise dans un projet de production. il y a quelques limitations maintenant que la liste mobile n'est plus tenue à jour. Vous pouvez utiliser un 51degrees.mobi (voir ci-dessous après) pour la liste mise à jour. Vous pouvez toujours utiliser cette technique pour détecter un navigateur mobile. – tsiorn

+1

Ne fonctionne pas sur iPad. – WhatsInAName

21

Le construit dans les capacités de détection du navigateur ne sont plus être tenus à jour. Jetez un oeil à Scott Hanselman's blog - reportez-vous à la section «Plus à venir» en bas pour plus de détails.

Je suggère de jeter un oeil à 51Degrees.mobi pour une détection plus précise. Voir aussi le Steve Sanderson blog que Hanselman référence pour implémenter ceci dans MVC3.

0

J'utilise cette méthode (fonctionne bien pour moi)

if (eDurar.MobileDetect.DeviceType.Any(m => Request.UserAgent.Contains(m))) 
{ 
    Layout = "~/Views/Shared/_mobileLayout.cshtml"; 
    @Html.Partial("mobileIndex"); 

} 
else 
{ 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
    @Html.Partial("desktopIndex"); 
} 

Je vous suggère d'utiliser quelque chose d'amorçage réactif, en évitant la page spécifique mobile est mieux

Questions connexes