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);
}
}
上一篇: 北京美食攻略 北京美食推荐
下一篇: 千岛湖在哪里 千岛湖主要景点
推荐阅读
-
python 中open文件路径的选择问题解析
-
Asp.net合并JS,Css文件,只要在路径中添加要压缩的文件名
-
解决vue打包css文件中背景图片的路径问题
-
Winform中在使用VS+svn进行协同开发时添加引用时的相对路径和绝对路径的问题
-
解决vue打包css文件中背景图片的路径问题
-
Asp.net合并JS,Css文件,只要在路径中添加要压缩的文件名
-
ASP 包含文件中的路径问题和使用单一数据库连接文件的解决方案
-
解决ASP.NET MVC返回的JsonResult 中 日期类型数据格式问题,和返回的属性名称转为“驼峰命名法”和循环引用问题
-
jsp中引用js/css的路径问题
-
Winform中在使用VS+svn进行协同开发时添加引用时的相对路径和绝对路径的问题