ASP.NET 2.0中母版页中引用文件路径的问题(对原处理方法中的bug进行了修改)

(原文路径http://www.cnblogs.com/amboyna/archive/2007/10/20/931198.html

在.net中使用/~可以在服务器控件中解决文件的路径问题,所以我也期盼着在html中也可以。幸好我从网上找到了一个非常不错的解决办法。但是原有的解决办法存在一个bug,本文进行了部分的修改

 

 

using System.Web;
using System.IO;
using System.Web.UI;
using System.Text.RegularExpressions;

 

/// <summary>
///CommonBasicPage 的摘要说明
///时间:2009年2月24日
///功能:为KevinWebSite站点所有aspx页面提供最基本的父类支持。
///说明:所有的aspx页面都要继承CommonBasicPage或CommonBasicPage的子类
/// </summary>
public abstract class CommonBasicPage : System.Web.UI.Page
{
    #region Vars

    /// <summary>
    /// 说明:该正则表达式用于对页面中的html控件中引用的图片、脚本等文件的路径进行解析,进而使html控件支持“~/”关键字。
    /// </summary>
    private static readonly String htmlControlUrlReg;

    #endregion

    #region  Constructed Function

    #region 静态构造函数

    static CommonBasicPage()
    {
        htmlControlUrlReg = "<(a|link|img|script|input|form).[^>]*(href|src|action)[ ]*=[ ]*(///"|'|)(.[^///"']*)(///"|'|)[^>]*>";
    }

    #endregion

    #endregion

    #region Event

    #region override Render

    /// <summary>
    /// 时间:2009年2月24日
    /// 功能:对页面中所有图片、文件等路径进行转换,进而使html控件也支持“~/”
    /// 说明:该段代码摘自于网上,参考文章http://www.cnblogs.com/amboyna/archive/2007/10/20/931198.html
    ///       本站对代码进行了一点改动,修改了原来存在的bug。比如参考文章中的代码无法对形如&lt;img src = "~/Image/Snap1.jpg" /&gt;进行正确的解析
    /// </summary>
    /// <param name="writer"></param>
    protected override void Render(HtmlTextWriter writer)
    {
        StringWriter tempStringWriter = new StringWriter();
        HtmlTextWriter tempHtmlTextWriter = new HtmlTextWriter(tempStringWriter);
        base.Render(tempHtmlTextWriter);
        string tempPageInnerHtml = tempStringWriter.ToString();

        #region 转换相对路径

        MatchCollection collection = Regex.Matches(tempPageInnerHtml, htmlControlUrlReg, 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);
                tempPageInnerHtml = tempPageInnerHtml.Replace(match.Groups[match.Groups.Count - 2].Value, url);
            }
        }

        #endregion

        writer.Write(tempPageInnerHtml);
    }

    #endregion

    #endregion

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值