Search code examples
c#asp.net-mvcasp.net-mvc-4action-filter

asp.net MVC4: how to detect screen width on the filter Action?


Hi This is My action filter, I need to detect the size of the screen to redirect to the adequate action, How can do this ??

public sealed class DetectViewFilterAttribute : ActionFilterAttribute
        {
            private readonly IRegistrationConfiguration _registrationConfiguration;
            public DetectViewFilterAttribute()
            {
                _registrationConfiguration = DependencyResolver.Current.GetService<IRegistrationConfiguration>();
            }
            public override void OnActionExecuting(ActionExecutingContext filterContext)
            {
                bool isMobile = false;
                string userAgent = HttpContext.Current.Request.UserAgent.ToLower();
                Regex mobileDetectionRegularExpression = new Regex(_registrationConfiguration.DetectMobileRegularExpression);

                isMobile = mobileDetectionRegularExpression.IsMatch(userAgent);
                if (isMobile)
                {
                    String url;
                    UrlHelper helper = new UrlHelper(filterContext.RequestContext);

                      // TODO **if width de device between 300 and 600 px*
                      url = helper.Action("Mobile","Inscription");
                      else
                       url = helper.Action("Tablette","Inscription");

                           HttpContext.Current.Response.Redirect(url);

                }
                base.OnActionExecuting(filterContext);
            }

}


Solution

  • You cannot know screen size on server side.. BUT you can know the user agent and then know it is a tablet, PC or smartphone. Then, you are closer to determine which view to display.

    As you are using MVC4... it is wise to read this article: http://www.hanselman.com/blog/MakingASwitchableDesktopAndMobileSiteWithASPNETMVC4AndJQueryMobile.aspx

    This way, you don't re-invent the wheel... as this behaviour is built in the asp.net MVC framework.