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;

 

///


///CommonBasicPage 的摘要说明
///时间:2009年2月24日
///功能:为KevinWebSite站点所有aspx页面提供最基本的父类支持。
///说明:所有的aspx页面都要继承CommonBasicPage或CommonBasicPage的子类
///

public abstract class CommonBasicPage : System.Web.UI.Page
{
    #region Vars

    ///


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

    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

    ///


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

    ///
    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

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