2013-11-22 2 views
2

Привет Это мой фильтр действий, мне нужно определить размер экрана для перенаправления на адекватное действие, как это сделать?asp.net MVC4: как определить ширину экрана в фильтре Action?

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

}

+0

маркетинговой службы просят сделать два разных вида для мобильных и tablette. Мне нужно определить ширину браузера на стороне клиента в устройстве – user1428798

ответ

2

Вы не можете узнать размер экрана на стороне сервера. НО вы можете знать пользовательский агент, а затем знать, что это планшет, ПК или смартфон. Затем вы ближе, чтобы определить, какой вид отображать.

Как вы используете MVC4 ... имеет смысл читать эту статью: http://www.hanselman.com/blog/MakingASwitchableDesktopAndMobileSiteWithASPNETMVC4AndJQueryMobile.aspx

Таким образом, вы не повторно изобретать колесо ... как это поведение встраивается в аспида. net MVC.

0

К сожалению, вы не можете иметь на стороне сервера код обнаружения клиента ширину экрана в одиночку. Вам нужно что-то на стороне клиента (возможно, Javascript), чтобы отправить серверу информацию о точном размере окна клиента. Это немного сложно для пользователя, так как страница сначала загружается, а затем отправляет эту информацию на сервер, а затем сервер может реагировать. Вот почему обнюхивание пользовательского агента используется много времени, поскольку эта информация отправляется на сервер по каждому запросу.

И, как сказал @Murali, есть решения, такие как использование CSS-запросов, которые позволят вам выполнять различные правила CSS на основе ширины клиента без необходимости привлечения сервера.

0

К сожалению, на сервере нет прямого способа получить размер экрана. Вы можете сделать это только на клиенте с помощью JavaScript.

Однако существуют файлы, которые .Net использует для определения определенных мобильных возможностей. Они расположены в C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\Browsers. Однако, поскольку размеры экрана могут отличаться для одного и того же мобильного клиента, они там не определены.

0

Как и другие ребята, вы не можете сделать эту сторону сервера. Но, если вы хотели бы иметь эту информацию только для мобильного устройства, WURFL имеет эту информацию (resolution_width и resolution_height).

Проверьте спецификации here