我有一个ASP.net母版页。在这个主人,我已经定义了所有的CSS和JavaScript文件。我还有一些图像和一些按钮和超链接。
所有网址都被声明为亲戚,即“/scripts/ian.js”
如果此站点是根网站,一切正常,但我需要它在虚拟目录中工作。
我的问题是,当我将此网站放在根网站下的虚拟目录中时,我的所有链接都指向根网站。所以我的链接指向www.root.com/scripts/ian.js,但它应该指向www.root.com/virtualDir/scripts/ian.js
我认为标题中的Base Href标记会有所帮助,但到目前为止它似乎并没有帮助。当我将鼠标悬停在根网站上时,所有链接仍然指向根网站。
我想要的是IIS或配置文件中的单个设置,我可以设置根URL,主页或内容页面上的任何图像,脚本或链接都指向正确的位置。
欢迎任何建议或想法。
由于
答案 0 :(得分:6)
所有网址都被声明为 相对即“/scripts/ian.js”
这些似乎是您正在使用的绝对URL,而不是相对URL,这可能是<base />
标记没有达到预期效果的原因:
此属性指定绝对值 作为基本URI的URI 解析相对URI。
- 来自http://www.w3.org/TR/html401/struct/links.html#h-12.4
您可以尝试从网址中删除前导“/”以查看是否有效?
如果做不到这一点,我倾向于使用ResolveClientUrl来解决这类问题,你会像其他人建议的那样使用 ResolveUrl :
<script type="text/javascript" src="<%= ResolveClientUrl("~/path/to/js") %>"></script>
...
<img src="<%= ResolveClientUrl("~/path/to/img") %>" alt="..." />
希望这有帮助。
答案 1 :(得分:2)
如果*'runat =“server”'属性,大多数代码(包括&lt; link&gt;,&lt; img&gt;等常规HTML标记)都可以使用〜/ 作为应用程序根路径已设定。
例如
<img src="~/images/test.png" runat="server" />
这使标记成为服务器标记,并且在将输出返回给浏览器之前,使用应用程序根替换代字号。
这对&lt; script&gt;的预期效果不正常。虽然。当为脚本标记设置'runat =“server'时,脚本将被视为服务器端javascript并尝试执行。
要解决此问题,您可以使用one of the register client script方法注入javascript。您可以在脚本标记中使用&lt;%= ResolveUrl('〜')%&gt; 标记。
答案 2 :(得分:2)
此静态方法返回应用程序(网站或虚拟目录)的根文件夹的完整http路径
public static string GetAppRootUrl(bool endSlash)
{
string host = HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority);
string appRootUrl = HttpContext.Current.Request.ApplicationPath;
if (!appRootUrl.EndsWith("/")) //a virtual
{
appRootUrl += "/";
}
if (!endSlash)
{
appRootUrl = appRootUrl.Substring(0, appRootUrl.Length - 1);
}
return host + appRootUrl;
}
所以,你可以写在母版页中:
<script src="<%= Server.HtmlEncode(GetAppRootUrl(false)) %>/scripts/ian.js" language="javascript" type="text/javascript"></script>
答案 3 :(得分:0)
在你的参考中使用波浪号(〜)(即〜/ scrips / ian.js)...看看它是否有效 对于链接,请尝试.aspx页面中的Page.ResolveUrl。
答案 4 :(得分:0)
所以我昨晚发现了这个IIS的怪异:
<script src="/js/file.js"></script>
无法在主IIS站点的子目录中的虚拟应用程序中正常运行。
相反,你必须这样做:
<script src="/js/file.js" type="text/javascript"></script>
这是执行此操作的标准方法,但如果您不是在寻找它,那么额外的标记会让相对路径问题消失,这会让您感到惊讶。