asp.net母板頁引用檔案的路徑問題
今天在匯入頁面的時候發現我用的資料夾下的母板頁引用的檔案無效
檔案的路徑沒有改變
在網上找了好長時間
都沒得到解決 最後...
終於找到了
當你的母版與你的頁面不在一個目錄下的時候
你母版引用的圖片,css,js等將會出現路徑問題而導致客戶端瀏覽器載入失敗,導致不能正確出效果。
思路:由於純html程式碼asp.net伺服器不做處理,所以需要在伺服器端處理一下
1. 圖片問題
非常好解決
<img runat="server" src="~/images/ad468x60.gif" alt="" />
加上runat="server" ,路徑使用絕對路徑~/基本上就OK了。
2. CSS檔案引用
<linkrel="stylesheet" type="text/css" href="style.css" />
這裡神奇的就是link的檔案的href是隨著被訪問檔案的目錄結構自動調整,說白了就考慮母版頁引用的路徑就可以了,其他不用費心。
比如在母版頁同目錄下的一個資料夾內的一個xxx.aspx引用的母版頁,那麼上面的語句在客戶端就自動變為
<linkrel="stylesheet" type="text/css" href="../style.css" />
前提就是<head runat="server"></head>必須有runat="server"
3. JS檔案的引用
<script type="text/javascript" src="menu/jquery.min.js"></script>
這樣的話在其他目錄下的頁面檔案,客戶端肯定就引用不到了
那麼你需要這樣處理
<script type="text/javascript" src='<%=ResolveUrl("menu/jquery.min.js")%>'></script>
<script type="text/javascript" src='<%=ResolveClientUrl("menu/ddsmoothmenu.js")%>'></script>
這是2種方式,在客戶端的路徑當然也會不一樣,分別是:
<scripttype="text/javascript" src='/TLERP/menu/jquery.min.js'></script>
<scripttype="text/javascript" src='../menu/ddsmoothmenu.js'></script>
那麼很明顯ResolveClientUrl是相對路徑,是比較好用的,當然ResolveUrl也有很多地方需要這樣的絕對路徑,其中TLERP是web應用的名字。
另外,如果你將這樣的程式碼放在了<head>裡面,將會報錯:
控制元件包含程式碼塊(即 <% ... %>),因此無法修改控制元件集合。
原因我不說了,你將引用的東西放在<body>裡即可,哪怕是<body>和<form>之間。