2013-11-22 54 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

營銷服務要求,使移動和藥片兩種不同的看法。我需要檢測設備中的客戶端瀏覽器寬度 – user1428798

回答

0

可悲的是,你不能有服務器端代碼單獨檢測客戶端屏幕寬度。您需要在客戶端(可能是Javascript)上發送關於客戶端窗口確切大小的信息。這對用戶體驗來說有點困難,因爲頁面必須首先加載,然後將該信息發送到服務器,然後服務器可以做出反應。這就是爲什麼用戶代理嗅探會花費很多時間,因爲每次請求都會將這些信息發送到服務器。

而@Murali表示,還有像使用CSS Media Queries這樣的解決方案,它允許您根據客戶端寬度執行不同的CSS規則,而無需涉及服務器。

0

不幸的是,在服務器上,沒有直接的方法來獲得屏幕的大小。您只能在使用JavaScript的客戶端上執行此操作。

但是,有一些.Net用於確定某些移動功能的文件。這些位於C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\Browsers。但是,由於相同移動客戶端的屏幕尺寸可能不同,因此它們在此處未定義。

0

正如其他人寫道,你不能做那個服務器端。但是,如果您只想爲移動設備提供此信息,WURFL將擁有該信息(resolution_widthresolution_height)。

檢查規格here