我的项目中有一个与此类似的目录结构:
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)
答案 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);
}
找到文档和教程