一個經常讓開發人員疑惑的問題是母版頁是如何處理相對路徑的。如果你使用的是靜態文字,這一問題不會困擾你。不過,如果你加入了<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代碼難看且不可移植,所以不推薦使用。
?
摘錄自:http://book.51cto.com/art/200809/91060.htm
剛剛在做項目中時遇到的這個問題,呵呵...特此記錄....項目進展緩慢....老大要發火啦...郁悶....
中餐牛腩粉¥4.2
今天在解決這個問題的時候另一個問題又出現了,現在我要在母版頁引入jquery的文件,按照上面的方法我寫成???
<script src="js/jquery.js" type="text/javascript" runat="server"></script>
可是在運行的時候卻出錯了,說是 jquery.js 中的第12行的$符號不知道是什么意思,然后我把 runat="server"去掉后就又運行成功了,看來是不能加 runat="server" 這個屬性了,可是這樣的話我在另一文件夾中套用母版頁的時候又會出現上面這個相對路徑的錯誤了,經到CSDN論壇發貼問,解決方法如下:
<script src='<%=ResolveUrl("~/js/jquery.js") %>' type="text/javascript"></script>
第一次知道有 ResolveUrl 這個方法,還真不錯,呵呵...
?
?
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
