主版頁面引用外部檔案的路徑問題,如載入javascript檔案時

來源:互聯網
上載者:User

在主版頁面中引用的外部檔案不外乎css 和js 檔案, css檔案比較簡單, 因為它的路徑是相對於主版頁面的位置而言的, 而js 則不然, 它是相對於內容頁而言的. 舉個例子, 有下面的檔案樹:

root
 |_master.master
 |_content1.aspx
 |_js1.js
 |_folder1
     |_content2.aspx

在應用程式的根下面, 有一個主版頁面master.master, 一個內容頁content1.aspx, 一個js檔案js1.js, 另外, 還有一個處於folder1子目錄下的另一個內容頁conten2.aspx,  則, 在主版頁面中引用js1.js 時, content1 的相對路徑就是目前的目錄, 直接寫檔案名稱就行了, 可是對content2來說,  js1.js 處於它的上層目錄, 相對路徑要寫作: ../js1.js  , 由於此js 檔案是在主版頁面中的引用的, 所以這個相對路徑就沒辦法直接寫了.

解決辦法有:
1. 直接寫絕對路徑.

<script type="text/javascript" src="//virtualPath/js1.js"></script>

這種做法是我極度反感, 並且無法忍受的, 因為它使得虛擬目錄的名字無法改變, 而且事實上, 我們公司應用程式的名字和正式伺服器上虛擬目錄的名字是不同的, 所以這種方法要麼在開發階段無效, 要麼在運行階段無效, 除非應用程式名稱和虛擬目錄名總是一樣, 並且虛擬目錄名不會改變, 否則不應該這樣引用js.

2. 在伺服器端註冊.

Page.ClientScript.RegisterClientScriptInclude("js1.js", Page.ResolveClientUrl("~/js1.js"));

這種做法的缺點也是明顯的, 首先, 它必須放在page_load 之類的事件處理器中, 每次回傳都執行一次,  其次, 這樣引用後, 在頁面上寫js代碼時, 無法智能感知到已經引用的js 檔案, 減慢編程速度, 而且一大堆警告也不是什麼賞心悅目的事件.

3. 用ScriptManager 引用

    <asp:ScriptManager ID="sm1" runat="server">
        <Scripts>
            <asp:ScriptReference ScriptMode="Auto" Path="~/Js1.js" />
        </Scripts>
    </asp:ScriptManager>

 

這種引用是可以智能感知到的, 目前為止也沒發現有什麼副作用, 是推薦的解決方案.

--

圖片url路徑問題也是相對於內容頁的, 所以在用戶端並沒有特別好的辦法, 建議是直接給img 控制項加個runat="server" 屬性, 例如:
 <img alt="" src="images/img.gif" runat="server" />
這樣, 伺服器就會自動給它產生正確的url. 

另外, 如果在樣式中指定了背景圖片之類的, 建議放入css檔案中, 在css檔案中, url() 裡面的相對路徑是相對於css檔案本身的, 而如果放入主版頁面中, 則就變成了相對於內容頁了.  例如:

主版頁面中:

<table class="css1">

css檔案:

.css1
{
    background-image:url(../images/1.jpg); 
    background-repeat:no-repeat;
}

 

而如果把這兩個樣式放在table的style中, 就只有跟主版頁面路徑相同的內容頁才能正確顯示.

 

註:轉載自木只八刀的http://www.cnblogs.com/Moosdau/archive/2008/09/27/1301059.html(感謝他的文章)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.