Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ASP.NET MVC 4 Mobile Features

I'm trying out the new ASP.NET MVC 4 Mobile Features. I made a simple app with just one controller (HomeController) and one view (Index). I also added a mobile version of the index view.

Views/Home/Index.cshtml Views/Home/Index.Mobile.cshtml 

When launching the application in a desktop browser the regular view is shown as expected, however when I launch the application in the Opera Mobile Emulator as a Samsung Galaxy S, I still get the regular view and not the mobile version.

the user agent string sent from the emulator looks like this:

Opera/9.80 (Windows NT 6.1; Opera Mobi/23731; U; en) Presto/2.9.201 Version/11.50 

Any ideas on why this is not working?

Update Thanks to @nemesv I was able to solve the problem, here is my current solution, hopefully it will cover most mobile scenarios.

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);     } } 

And i Global.asax

DisplayModeProvider.Instance.Modes.Insert(0, new MobileDisplayMode()); 
like image 665
Pelle Avatar asked Mar 08 '12 08:03

Pelle


People also ask

Can MVC be used for mobile applications?

MVC (model-view-controller) is considered one of the most popular in the mobile web app development.

Is MVC 4 still supported?

We have many applications developed with ASP.NET MVC 4 and below versions. As per the Microsoft Support Policy, the retirement date for ASP.NET MVC is July 1st, 2019.


1 Answers

ASP.Net (actually the HttpBrowserCapabilitiesBase class) doesn't recognize the Opera Mobile Emulator as a Mobile browser.

You can check this in any controller action: HttpContext.Request.Browser.IsMobileDevice will return false for the Opera Mobile browser.

Because the built in DefaultDisplayMode uses the following method to check mobile browsers you need to register your custom DisplayMode which correctly recognizes Opera Mobile.

To do this you need to add this to the Global.asax Application_Start:

DisplayModeProvider.Instance.Modes.Insert(0, new DefaultDisplayMode("Mobile") {     ContextCondition = (context => context.GetOverriddenUserAgent()         .IndexOf("Opera Mobi", StringComparison.OrdinalIgnoreCase) >= 0) }); 
like image 135
nemesv Avatar answered Oct 02 '22 14:10

nemesv