主版頁面 javascript 檔案的相對路徑問題

來源:互聯網
上載者:User

一個經常讓開發人員疑惑的問題是主版頁面是如何處理相對路徑的。如果你使用的是靜態文字,這一問題不會困擾你。不過,如果你加入了<img>標籤或者指向其他資源的HTML標籤,問題就可能發生。

當你把主版頁面和內容頁放在不同的目錄時,問題就發生了。把主版頁面和內容頁分放到不同的目錄,這是大型網站推薦使用的最佳實務。實際上,微軟建議你在專門的檔案夾裡儲存所有的主版頁面。不過,如果你不夠小心,使用相對路徑時會帶來問題。

例如,假設你把主版頁面放在一個叫做MasterPages的子檔案夾裡,並在主版頁面裡加入了如下的<img>標籤:

假設檔案\MasterPages\banner.jpg存在,這看起來是行得通的。甚至在Visual Studio設計環境會出現圖片。但是,如果你在另一個子檔案夾裡建立了一個內容頁,路徑就會被解釋成相對於那個檔案夾。如果檔案在那裡不存在,就會得到 一個破損的連結而看不到圖片。更糟的是,如果有一幅具有相同檔案名稱的另外一個圖片,你會不經意地得到一幅錯誤的圖片。

這樣的問題之所以會發生,是因為<img>標籤是普通的HTML。所以,ASP.NET不會接觸到它。遺憾的是,當ASP.NET建立 內容頁的時候,這個標籤就不合適了。相同的問題出現在向其他頁面提供相對連結的<a>標籤以及用來把主版頁面連結到樣式表 的<link>元素。

要解決這一問題,你可以預先把URL寫成相對於內容頁面的地址。不過這會帶來混淆,限制主版頁面使用的範圍,並且產生在設計環境裡不正確顯示主版頁面的負面效應。

另一個快捷的解決方案是把圖片標籤變成伺服器端控制項,這樣ASP.NET就會修複這個錯誤:

這個解決辦法會起作用是因為ASP.NET根據這一資訊建立一個HtmlImage伺服器控制項。這個對象在主版頁面的Page對象執行個體化後建立,此時,ASP.NET把所有路徑解釋為相對於主版頁面的位置。你可以使用同樣的技術來修複<a>標籤對其他頁面的連結。

你還可以使用根路徑文法,並用"~"字元作為URL的開頭。例如,下面這個<img>標籤毫無歧義地指向網站的MasterPages檔案夾中的banner.jpg檔案。

遺憾的是,這種文法只對伺服器端控制項有效。如果你要對普通的HTML產生同樣的效果,你需要在連結裡包含網域名稱的完整的相對路徑。這樣的HTML代碼難看且不可移植,所以不推薦使用。

 

 

最終方案

<script src="js/jquery.js" type="text/javascript" runat="server"></script>

運行時出錯,說是jquery.js中的第12行的$符號不知道是什麼意思,把runat="server"去掉後又成功,看來是不能加runat="server"這個屬性

解決方案:

<script src='<%=ResolveUrl("~/js/jquery.js") %>' type="text/javascript"></script>

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.