2010-02-12 55 views
1

在Visual Studio中工作時有關路徑的問題。在我的母版頁中,我有一些加載CSS文件以及JavaScript文件的路徑。Visual Studio和ASP.Net路徑問題

我的第一個問題是,如果我使用相對路徑,相對路徑是否應該來自主頁面文件的位置?例如,如果我將所有母版頁文件保存在名爲MasterPages的網站根目錄下,我應該假設這是我的相對路徑加載css文件的起點?如果該主頁面用於包裝一個aspx文件,樹中的幾個目錄是硬編碼的相對路徑仍然有效?

第二個問題,有沒有辦法使用絕對路徑,以便一切工作在我的本地機器以及當我將文件移動到webroot?例如我的本地機器上的應用程序路徑可能是localhost/myappdir/default.aspx,但是當我將應用程序移動到服務器時,沒有myappdir,並且default.aspx位於webroot中。我不想在將文件移動到服務器後更改文件中的路徑。

目前我有..

SRC = 「<%= VirtualPathUtility.ToAbsolute( 」〜/ lib中/ CSS/style.css文件「)%>」

但這樣的Visual Studio找不到css文件更新intellence

+0

這個解決方案怎麼了?內容佔位符包裝我的js包括.. JBeckton 2010-02-12 03:21:06

回答

0

通常,您應該始終使用服務器相關路徑(如in,/images/stuff.gif)。使用相對路徑(如../images/stuff.gif)會每一次都讓你感到困擾,同樣會試圖依賴ASP.NET「Magic」,例如VirtualPathUtility.ToAbsolute和ResolveClientUrl。

有時候,在服務器上,你需要用tilda預先設置路徑(如〜/ images/stuff。gif),以便它能正確導航ASP.NET要求您將所有項目建立在基礎上的虛擬目錄。

當然,這也意味着您需要將開箱設置爲multisite,以便您可以請將您的根改爲http://mysite.dev/之類的內容,並確保所有服務器相​​關路徑正常工作。 (使用VS.NET內置服務器在技術上也可以解決這個問題,但是真的,你想使用那個東西嗎?)

+0

我曾經爲每個項目設置本地網站,但厭倦了諸如設置dns等額外工作。我只是來.Net和我在其他平臺上工作這是一個沒有問題。我可能會重新爲每個項目建立一個新的iis網站。我在win7最終,所以我不認爲我需要在這裏的多個網站的DLL。 – JBeckton 2010-02-12 03:26:32

1

如果您使用相對路徑到您的css/Javascript文件,那麼他們將需要是相對於頁面,而不是母版頁。

This article做了解釋,你在這種情況下,有選擇的一個很不錯的工作,並接近尾聲,他們提出了一個很好的解決這一類型的問題,呈現腳本或鏈接標記爲您和呼叫ResolveClientUrl用戶控制使路徑正確。

+0

這個控制看起來不錯,但看起來像是在工程上。我可以給它一個旋轉。 – JBeckton 2010-02-12 03:17:52

0

使用「〜」運算符來解析相對於根的所有內容。切勿使用相對路徑。即使我不使用主題,我也可以使用它們的語法通過創建一個如下所示的文件夾結構來獲得對我的CSS文件的簡單語法訪問:App_Themes/Style/stylesheet.css然後,在我的ASPX頁面指令中添加Theme =「Style」和我的CSS文件將被自動解析 - 不完全是傳統的,但非常有效的:-)

UPDATE:

要解決的JS,你可以使用下面的在你的母版頁的代碼隱藏:

string myScript = "js/footerFix.js"; 
Page.ClientScript.RegisterClientScriptInclude("myKey", myScript); 

使用IIS7,您無需更改任何內容即可獲得「多站點」行爲R等這是在烘焙例如,你可以有幾個地點如下,沒有任何單獨的配置從創建虛擬目錄,通過URL達到了一邊:

本地主機/ PROJECT1
本地主機/項目2
本地主機/項目3

+0

我發現我的樣式表路徑得到更新,如果說我的內容頁面是樹中的幾個文件夾,但是js文件的路徑不是 – JBeckton 2010-02-12 02:56:08

+0

我想了解10年的ASP.NET體驗,迄今爲止,避免使用Page.ClientScript.RegisterClientScriptInclude。這是一個醜陋的黑客,忽略了HTML有一個很好的「