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

本文介绍了一种在ASP.NET中解决CSS、脚本及图片等文件路径问题的方法。通过使用波浪线(~/)开头的路径或者自定义PageBase类来实现路径的灵活处理,确保应用程序在迁移或重构时路径配置仍然正确。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

模版页中难免要引用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的代码里面抠出来的):

 

   

  1.  public abstract class PageBase : Page  
  2.     { 
  3.         protected override void Render(HtmlTextWriter writer) 
  4.         { 
  5.             StringWriter stringWriter = new StringWriter(); 
  6.             HtmlTextWriter htmlWriter = new HtmlTextWriter(stringWriter); 
  7.             base.Render(htmlWriter); 
  8.             string html = stringWriter.ToString(); 
  9.             #region 转换相对路径 
  10.             MatchCollection collection = Regex.Matches(html, "<(a|link|img|script|input|form).[^>]*(href|src|action)=(///"|'|)(.[^///"']*)(///"|'|)[^>]*>", RegexOptions.IgnoreCase); 
  11.             foreach (Match match in collection) 
  12.             { 
  13.                 if (match.Groups[match.Groups.Count - 2].Value.IndexOf("~") != -1) 
  14.                 { 
  15.                     string url = this.Page.ResolveUrl(match.Groups[match.Groups.Count - 2].Value); 
  16.                     html = html.Replace(match.Groups[match.Groups.Count - 2].Value, url); 
  17.                 } 
  18.             } 
  19.             #endregion 
  20.             writer.Write(html); 
  21.         } 
  22.     } 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值