如果你在网站中使用了母版页或自定义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); }
个人更喜欢第二种做法。因为本人比较懒!