zoukankan      html  css  js  c++  java
  • asp.net 检测访问者是iphone,android,web(摘录)

    aps.net
    可以使用WebFormViewEngine来实现。
    参考文章:http://www.hanselman.com/blog/MixMobileWebSitesWithASPNETMVCAndTheMobileBrowserDefinitionFile.aspx
    源代码

    C#代码 复制代码 收藏代码
    1. public class MobileCapableWebFormViewEngine : WebFormViewEngine   
    2. {   
    3.     public override ViewEngineResult FindView(ControllerContext controllerContext, string viewName, string masterName, bool useCache)   
    4.     {   
    5.         ViewEngineResult result = null;   
    6.         var request = controllerContext.HttpContext.Request;   
    7.     
    8.         //This could be replaced with a switch statement as other advanced / device specific views are created   
    9.         if (UserAgentIs(controllerContext, "iPhone"))       
    10.         {   
    11.             result = base.FindView(controllerContext, "Mobile/iPhone/" + viewName, masterName, useCache);   
    12.         }   
    13.     
    14.         // Avoid unnecessary checks if this device isn't suspected to be a mobile device   
    15.         if (request.Browser.IsMobileDevice)   
    16.         {   
    17.             if (UserAgentIs(controllerContext, "MSIEMobile 6"))   
    18.             {   
    19.                 result = base.FindView(controllerContext, "Mobile/MobileIE6/" + viewName, masterName, useCache);   
    20.             }   
    21.             else if (UserAgentIs(controllerContext, "PocketIE") && request.Browser.MajorVersion >= 4)   
    22.             {   
    23.                 result = base.FindView(controllerContext, "Mobile/PocketIE/" + viewName, masterName, useCache);   
    24.             }   
    25.     
    26.             //Fall back to default mobile view if no other mobile view has already been set   
    27.             if ((result == null || result.View == null) &&   
    28.                             request.Browser.IsMobileDevice)   
    29.             {   
    30.                 result = base.FindView(controllerContext, "Mobile/" + viewName, masterName, useCache);   
    31.             }   
    32.         }   
    33.     
    34.         //Fall back to desktop view if no other view has been selected   
    35.         if (result == null || result.View == null)   
    36.         {   
    37.             result = base.FindView(controllerContext, viewName, masterName, useCache);   
    38.         }   
    39.     
    40.         return result;   
    41.     }   
    42.     
    43.     private bool UserAgentIs(ControllerContext controllerContext, string userAgentToTest)   
    44.     {   
    45.         return (controllerContext.HttpContext.Request.UserAgent.IndexOf(userAgentToTest, StringComparison.OrdinalIgnoreCase) > 0);   
    46.     }   
    47. }  
    public class MobileCapableWebFormViewEngine : WebFormViewEngine
    {
        public override ViewEngineResult FindView(ControllerContext controllerContext, string viewName, string masterName, bool useCache)
        {
            ViewEngineResult result = null;
            var request = controllerContext.HttpContext.Request;
     
            //This could be replaced with a switch statement as other advanced / device specific views are created
            if (UserAgentIs(controllerContext, "iPhone"))    
            {
                result = base.FindView(controllerContext, "Mobile/iPhone/" + viewName, masterName, useCache);
            }
     
            // Avoid unnecessary checks if this device isn't suspected to be a mobile device
            if (request.Browser.IsMobileDevice)
            {
                if (UserAgentIs(controllerContext, "MSIEMobile 6"))
                {
                    result = base.FindView(controllerContext, "Mobile/MobileIE6/" + viewName, masterName, useCache);
                }
                else if (UserAgentIs(controllerContext, "PocketIE") && request.Browser.MajorVersion >= 4)
                {
                    result = base.FindView(controllerContext, "Mobile/PocketIE/" + viewName, masterName, useCache);
                }
     
                //Fall back to default mobile view if no other mobile view has already been set
                if ((result == null || result.View == null) &&
                                request.Browser.IsMobileDevice)
                {
                    result = base.FindView(controllerContext, "Mobile/" + viewName, masterName, useCache);
                }
            }
     
            //Fall back to desktop view if no other view has been selected
            if (result == null || result.View == null)
            {
                result = base.FindView(controllerContext, viewName, masterName, useCache);
            }
     
            return result;
        }
     
        private bool UserAgentIs(ControllerContext controllerContext, string userAgentToTest)
        {
            return (controllerContext.HttpContext.Request.UserAgent.IndexOf(userAgentToTest, StringComparison.OrdinalIgnoreCase) > 0);
        }
    }



    启用该引擎的使用方法:

    C#代码 复制代码 收藏代码
    1. protected void Application_Start()   
    2.        {   
    3.            AreaRegistration.RegisterAllAreas();   
    4.   
    5.            RegisterRoutes(RouteTable.Routes);   
    6.   
    7.            ViewEngines.Engines.Add(new MobileCapableWebFormViewEngine());   
    8.   
    9.            ControllerBuilder.Current.SetControllerFactory(new NinjectControllerFactory());   
    10.   
    11.            CronScheduler.Instance.startUp();   
    12.   
    13.   
    14.        }  
  • 相关阅读:
    eval是只读数据,bind是可更新的.
    数据库中的html在页面上显示
    kindeditor asp.net 模板问题 clientidmode="Static"
    我对if(!this.IsPostBack)的理解
    asp.net正则表达式
    由于扩展配置问题而无法提供您请求的页面。如果该页面是脚本,请添加处理程序。
    IIS7错误:不能在此路径中使用此配置节。如果在父级别上锁定了该节,便会出现这种情况。锁定是默认设置的(overrideModeDefault="Deny")...
    Microsoft.AspNet.FriendlyUrls发布到IIS后404报错的解决方案
    jQuery 绑定事件
    jQuery 位置
  • 原文地址:https://www.cnblogs.com/lzjsky/p/2673211.html
Copyright © 2011-2022 走看看