ASP.NET 2.0中主版頁面中引用檔案路徑的問題(收集)

來源:互聯網
上載者:User

一直沒去研究,終於受不了,找個解答:

  模版頁中難免要引用CSS、指令碼、圖片等,這些檔案的路徑如果簡單的使用相對路徑,那麼如果引用模版的目錄一發生變化,這些路徑就會出錯;如果使用絕對路徑,又不夠靈活,如果應用程式目錄發生變化,可能會導致要大量修改。asp.net支援一種相對於應用程式的路徑,以波浪線開頭的,形如"~/",使用它即可解決,例如:
<link rel="stylesheet" media="screen" type="text/css" href="<%=ResolveClientUrl("~/css/global.css") %>" />

當然如果你覺得每個路徑都要寫成動態不爽,而又正好有頁面基類的話,倒是可以換一種方式:

所有的路徑直接書寫為相對於應用程式目錄的路徑,形如:
<link rel="stylesheet" media="screen" type="text/css" href="~/css/global.css" />
當然預設HTML是不支援的這樣的路徑方式的,這時候就要藉助PageBase了,代碼如下(好像是從DNN的代碼裡面摳出來的):

 

    public abstract class PageBase : Page 
    {
        protected override void Render(HtmlTextWriter writer)
        {
            StringWriter stringWriter = new StringWriter();
            HtmlTextWriter htmlWriter = new HtmlTextWriter(stringWriter);
            base.Render(htmlWriter);
            string html = stringWriter.ToString();
 
 
            #region 轉換相對路徑
            MatchCollection collection = Regex.Matches(html, "<(a|link|img|script|input|form).[^>]*(href|src|action)=(\\\"|'|)(.[^\\\"']*)(\\\"|'|)[^>]*>", RegexOptions.IgnoreCase);
 
            foreach (Match match in collection)
            {
                if (match.Groups[match.Groups.Count - 2].Value.IndexOf("~") != -1)
                {
                    string url = this.Page.ResolveUrl(match.Groups[match.Groups.Count - 2].Value);
                    html = html.Replace(match.Groups[match.Groups.Count - 2].Value, url);
                }
            }
            #endregion
            writer.Write(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.