欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ASP.NET中母版页中引用文件路径的问题

程序员文章站 2022-04-06 17:41:18
...

模版页中难免要引用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了(BasePage要继承System.Web.UI.Page,各个子页面则需要继承BasePage就可以使用里面的变量和方法了)

代码如下(好像是从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); 
 
        } 
 
    }