解决母版页和自定义控件中的路径问题

如果你在网站中使用了母版页或自定义web控件,那么你一样遇见过这样的问题,如果引用母版页的页面和母版页不在同一级目录下,那些非服务器控件中的路径就会发生混乱。关于这个问题,我在网上查了下:

有的人这样解决

<script src='<%= Page.ResolveClientUrl("~/scripts/jquery-1.4.1.js") %>'type="text/javascript"></script>

不过这样做也有不好之处就是这样无法在后台的代码中动态为<header>添加东西,编译器会报错,解决办法是在<header>中放入一个literal控件,在后台代码里重新拼字符串赋给literal;另外每个路径都要如此修改一番,麻烦!

还有人这样做:

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

个人更喜欢第二种做法。因为本人比较懒!

原文地址:https://www.cnblogs.com/jameszh/p/2852982.html