RouteHandler与相对路径冲突

时间:2011-04-08 10:56:38

标签: asp.net relative-path

我的项目中有一个与此类似的目录结构:

Root
  |
  |- Utilities
  |
  |- Modules
      |
      |- Admin

在admin目录中,我有一个简单的页面default.aspx和一个javascript文件validation.js

我只是想在我的aspx页面中引用这个文件,比如

<script src="validation.js" ...></script>

因为我正在使用路由处理程序,所以我的网址就像这个模板

http://mysubdomain.mysite.com/admin/UserId/manage

(用三重des加密字符串替换userid,然后设置)

所以既然相对路径被用来访问js文件,当我尝试检查firebug时,它试图用这个路径访问js文件:

http://mysubdomain.mysite.com/admin/UserId/manage/validation.js

当然,它不存在。我看到的唯一方法是指定完整的相对路径

src="\modules\admin\validation.js"

当然,应该有一些方法可以使用这个验证js而没有完整的相对路径。怎么做到的?

感谢。

ps:这都在.aspx页面,而不是代码隐藏(.cs)

2 个答案:

答案 0 :(得分:1)

我也遇到过这个问题但从来没有做过任何事情。我通常最终使用完整的相对路径,如果目录发生变化,我必须每次都手动更改它。我认为没有办法做到这一点。

当然,我希望被证明是错的。

答案 1 :(得分:0)

我认为您要找的是HTML base标记。

在任何外部引用之前在<base href="http://mysubdomain.mysite.com/modules/admin/" />元素中指定head将使引用以http://mysubdomain.mysite.com/modules/admin/作为路径根。要在整个站点中获得此功能,您可以编写一个小脚本并将其包含在母版页中。

我还没有测试过,但我认为以下内容应该可行。 :

    public const string BASE_HREF_FORMAT = @"<base href=""http://{0}"" />";
    public static string GetBaseHref(HttpContext httpContext){
        var sv = httpContext.Request.ServerVariables;
        var sb = new StringBuilder();
        var serverName = sv["SERVER_NAME"];
        var path = sv["PATH_INFO"];
        if(path.Contains("/"))
        {
            path = path.Substring(0, path.LastIndexOf("/")+1);
        }
        return string.Format(BASE_HREF_FORMAT, path+serverName);
    } 

您可以在http://www.w3schools.com/tags/att_base_href.asp

找到文档和教程