2012-01-02 28 views
1

我目前使用HTML條件語句來選擇基於IE版本的CSS文件。我該如何在服務器端做到這一點。根據ASP.NET中的IE版本選擇不同的CSS文件

<!--[if IE 6]> 
    <link rel="stylesheet" type="text/css" href="style/ie6.css" media="screen" /> 
<![endif]--> 
<!--[if IE 7]> 
    <link rel="stylesheet" type="text/css" href="style/ie7.css" media="screen" /> 
<![endif]--> 
<!--[if IE 8]> 
    <link rel="stylesheet" type="text/css" href="style/ie8.css" media="screen" /> 
<![endif]--> 
+0

這樣..我有代碼從html和重寫在aspx – 2012-01-02 07:28:27

+0

坦克balexandre編輯我的問題.. – 2012-01-02 07:31:21

+0

@YusanSusandi在[faq的](http://stackoverflow.com/faq)你找出如何正確使用標記,以及在編寫時,您可以簡單地打開橙色'?'標誌,打開一個簡單的對話框,其中包含您可以使用的標記格式。 – balexandre 2012-01-02 07:36:13

回答

1

確定從HTTP請求的瀏覽器類型:

System.Web.HttpBrowserCapabilities browser = Request.Browser 

然後渲染相應的頁面:

<% if (browser.Browser == "IE" && browser.MajorVersion == 6) { %> 
    <link rel="stylesheet" type="text/css" href="style/ie6.css" media="screen" /> 
<% } else if (browser.Browser == "IE" && browser.MajorVersion == 7) { %> 
    <link rel="stylesheet" type="text/css" href="style/ie7.css" media="screen" /> 
<% } else if (browser.Browser == "IE" && browser.MajorVersion == 8) { %> 
    <link rel="stylesheet" type="text/css" href="style/ie8.css" media="screen" /> 
<% } %> 

我相信你的頁面,爲<head>元素中設置runat="server"屬性這工作。

雖然這不是一個很好的方法。更好的方法是使用JavaScript或問題中使用的方法在客戶端進行。

+0

請記住'HttpBrowserCapabilities'不可靠 – balexandre 2012-01-02 07:55:22

+1

如果客戶端欺騙他們的userAgent,他們應該得到任何渲染問題。 :P – CalMlynarczyk 2012-01-02 08:06:46

0
  • 什麼是你的目錄結構?
  • 您正在使用什麼ASP.NET框架,Webforms,MVC?

唯一出現在我腦海的是你正在使用的CSS路徑,例如,在MVC中,例如你應該編寫默認行爲/Content/Css/ie6.css

一個好主意總是使用反斜槓符號/,它將指向網站根目錄並將文件夾追加到從那裏的路徑中。

一切都不聞不問效果很好ASP.NET,只記得,唯一的區別是,一個普通的HTML頁面不需要任何服務器上運行,那麼,你在你的瀏覽器中打開文件時,它挑選的一切,一個一個PHP/ASP.NET需要一個服務器才能運行,所以你需要尊重服務器路徑。

順便說一句,我會建議Html5 boilerplate如果你正在開始一個新的網站...

+0

在aspx中的「<! - 」和「 - >」之間讀取爲comentar,所以不會執行。如何寫入aspx?該代碼我放在標記 ... – 2012-01-02 07:38:11

+0

不,這是您的編輯器突出顯示,代碼將按原樣運行,並將輸出完全所需的內容。只需嘗試一下簡單的CSS規則,例如'body {background-color:red; }'並改變其他3個文件的顏色('ie7.css','ie8.css'和'.html'文件 - 確保紅色背景在'ie6.css'中) – balexandre 2012-01-02 07:43:26

-1

不知道如何使用ASPX做到這一點,但也有許多方法來使用JavaScript做到這一點。

+0

不是他的問題... – balexandre 2012-01-02 07:37:21

0

我認爲你應該堅持你目前的解決方案,但如果你需要做到這一點服務器端,你總是可以檢查用戶代理,然後註冊樣式表。

類似這樣;

Dim userAgent As String = Request.UserAgent 

If (userAgent.IndexOf("MSIE 6.0") > -1) Then 

    HtmlLink css = new HtmlLink(); 
    css.Href = "css/ie6.css"; 
    css.Attributes["rel"] = "stylesheet"; 
    css.Attributes["type"] = "text/css"; 
    css.Attributes["media"] = "all"; 
    Page.Header.Controls.Add(css); 

End If 

瞭解更多關於HttpRequest.UserAgent Property

0

試試這個:

<link runat="server" rel="stylesheet" type="text/css" 
    ie:href="style/ie6.css" ie7:href="style/ie7.css" ie8:href="style/ie8.css" 
    ie9:href="style/ie8.css" ie0plus:"style/ie8.css" 
    media="screen" /> 

的性能改進劑一樣「即:」匹配下,他們可以在瀏覽器樹中的最遠的元素,所以「即」獨將匹配所有IE瀏覽器,但如果它是IE7,那麼「ie7」將會匹配。我不認爲IE6有瀏覽器模式,這就是爲什麼你需要ie9和ie10plus的密鑰;因爲他們在樹下,他們會匹配而不是「ie」。

The。NET瀏覽器模式文件位於:

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\Browsers 

,如果你想(不要編輯現有的),你也可以添加自己的病毒碼文件。添加一個後,運行:

aspnet_regbrowsers -i 
0

注意re。接受的答案(添加代碼<head>):

如果<head>設置爲runat="server",你(或任何其他代碼)試圖改變杆頭的.Controls收集這將導致一個錯誤。

AJAX控件工具包在某些情況下會執行此操作。

相關問題