Определение пользовательского элемента управления для вызова на основе браузера

У меня есть два пользовательских элемента управления в моем проекте ASP.Net, один явно для использования с Internet Explorer 6 (IE6), а другой должен использоваться, когда браузер пользователя не IE6.

Как бы я настроил это так, чтобы это произошло; это что-то, что я могу поместить на главной странице?

13.10.2009 14:45:26
4 ОТВЕТА
РЕШЕНИЕ

Вы можете достичь этого, используя Browserсвойство HttpRequestобъекта .

На вашей странице могут быть размещены оба пользовательских элемента управления во время разработки, а затем во время выполнения вы проверяете 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 и:

Firefox3.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
13.10.2009 15:01:23

Чтобы получить браузер, вы можете использовать:

Response.Write(Request.Browser.Browser.ToString());
Response.Write(Request.Browser.Version.ToString());
1
13.10.2009 14:47:26

Перефразируйте заголовки запросов на странице code-behind вашего content.master, чтобы выяснить, какой браузер, и установите для свойства Visible элемента управления, который вы не хотите использовать, значение false. Это предполагает, что эти два элемента управления размещены на самой главной странице. Если они появляются только на некоторых страницах, то вы можете сделать то же самое, но на этих отдельных страницах, а не на главной странице.

2
13.10.2009 14:47:32
Судя по тому, как был поставлен вопрос, кажется, что эти пользовательские элементы управления содержатся в главных страницах.
o.k.w 13.10.2009 14:52:47

Вы можете использовать объект навигатора JavaScript. Оберните их в div и затем скройте или покажите их с помощью jQuery.

0
13.10.2009 14:57:49
В зависимости от природы элементов управления, они могут быть слишком «тяжелыми», чтобы отображать их все время и позволить пользовательскому интерфейсу скрыть один из них. Все еще жизнеспособное решение все же.
o.k.w 13.10.2009 15:00:19