900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > ASP.NET 2.0中母版页中引用文件路径的问题(收集)

ASP.NET 2.0中母版页中引用文件路径的问题(收集)

时间:2020-12-01 09:30:52

相关推荐

ASP.NET 2.0中母版页中引用文件路径的问题(收集)

一直没去研究,终于受不了,找个解答:

模版页中难免要引用CSS、脚本、图片等,这些文件的路径如果简单的使用相对路径,那么如果引用模版的目录一发生变化,这些路径就会出错;如果使用绝对路径,又不够灵活,如果应用程序目录发生变化,可能会导致要大量修改。支持一种相对于应用程序的路径,以波浪线开头的,形如"~/",使用它即可解决,例如:

<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);

}

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。