【问题标题】:Determining which User Control to call based on browser根据浏览器确定调用哪个用户控件
【发布时间】:2009-10-13 23:10:06
【问题描述】:

我的 ASP.Net 项目中有两个用户控件,一个明确用于 Internet Explorer 6 (IE6),另一个应在用户的浏览器不是 IE6 时使用。

我将如何进行设置以使这种情况发生;这是我可以放在母版页中的东西吗?

【问题讨论】:

    标签: .net asp.net user-controls internet-explorer-6


    【解决方案1】:

    您可以通过使用Browser property of the HttpRequest object 来实现此目的。

    您的页面可以在设计时放置两个用户控件,然后在运行时检查Request.Browser 属性以确定客户端的浏览器并以编程方式隐藏您不希望用户看到的用户控件.
    或者,您可以完全从您的服务器端代码实例化和呈现正确的用户控件(同样,在检查 Request.Browser 属性之后)。

    例如,运行以下代码:

    public partial class _Default : System.Web.UI.Page 
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Response.Write(Request.Browser.Type.ToString());
    
        }
    }
    

    在“标准”ASPX 页面中显示:

    IE7

    在 Internet Explorer 7 中运行时:

    火狐3.5.3

    (在 Firefox 中运行时)

    因此,您可以在要将此功能添加到的网页中包含类似以下的代码:

    public partial class _Default : System.Web.UI.Page 
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Request.Browser.Type.ToString().ToLower().Contains("ie"))
            {
                // User's browser is Internet Explorer.
                // Let's hide UserControl1 but display UserControl1
                WebUserControl1.Visible = false;
                WebUserControl2.Visible = true;
            }
            else
            {
                // User's browser is something other than Internet Explorer.
                // Let's hide UserControl2 but display UserControl1.
                WebUserControl1.Visible = true;
                WebUserControl2.Visible = false;
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

      在您的 content.master 的代码隐藏页面中嗅探请求标头以确定哪个浏览器,并将您不想要使用的控件上的 Visible 属性设置为 false。这是假设这两个控件由母版页本身托管。如果它们只出现在某些页面上,那么您可以执行相同的操作,但在这些单独的页面中而不是母版页中。

      【讨论】:

      • 从提出问题的方式来看,这些用户控件似乎包含在母版页中。
      【解决方案3】:

      要获得您可以使用的浏览器:

      Response.Write(Request.Browser.Browser.ToString());
      Response.Write(Request.Browser.Version.ToString());
      

      【讨论】:

        【解决方案4】:

        您可以使用 javascript 导航器对象。将它们包装到一个 div 中,然后使用 jQuery 隐藏或显示它们。

        【讨论】:

        • 根据控件的性质,可能太“重”而无法一直渲染并让 UI 隐藏其中一个。不过仍然是一个可行的解决方案。
        猜你喜欢
        • 2015-10-09
        • 1970-01-01
        • 2015-02-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多