指定多站点web服务器和本地主机上的相对路径

Specifying a relative path on a multiple site web server and localhost

本文关键字:主机 路径 相对 站点 web 服务器      更新时间:2023-09-26

我有一个ASP。NET网站,该网站被发布到具有多个站点的web服务器。例如:

www.example.com/SiteAwww.example.com/SiteB

另外,在发布之前,我也在本地测试网站,例如在localhost:12345

当我为映像指定路径时,例如:/Images/exampleImage.gif,这在本地运行站点时有效,因为Images文件夹位于根目录中。localhost:12345/Images/exampleImage.gif是本例中正确的路径。

但是当发布到web服务器时,例如www.example.com/SiteA,同样的路径试图去www.example.com/Images/exampleImage.gif,图像不能正确显示

另外,这只适用于HTML控件,与ASP控件一样,我知道我可以使用波浪(~/Images/exampleImage.gif),它会知道查看网站的根目录,即www.example.com/SiteA/Images/exampleImage.gif

对于我来说,我强烈建议使用HTML控件。

编辑:这样做的原因是因为我有JavaScript改变一个html img控件的图像基于如果一个div是隐藏的:
function Toggle(commId, imageId) {
    var div = document.getElementById(commId);
    var img = document.getElementById(imageId);
    if (div.style.display == 'none') {
        div.style.display = 'inline';
        img.src = "/Images/minus.gif";
    } else {
        div.style.display = 'none';
        img.src = "/Images/plus.gif";
    }
}

我怎么能得到路径到图像文件夹,相对于网站的根当每个网站在服务器上的文件夹,以及仍然在本地主机上工作?

您必须使用代码执行~/或在服务器上发布一个名为"/Images"的新虚拟目录,其中包含图像。

我不知道你可以在JavaScript中嵌入c#代码,但只要做:

function Toggle(commId, imageId) {
    var div = document.getElementById(commId);
    var img = document.getElementById(imageId);
    if (div.style.display == 'none') {
        div.style.display = 'inline';
        img.src = "<%= ResolveUrl("~/Images/minus.gif") %>";
    } else {
        div.style.display = 'none';
        img.src = "<%= ResolveUrl("~/Images/plus.gif") %>";
    }
}

由于ResolveUrl方法可以采用波浪(~)作为路径值,并且知道网站的根目录高于服务器的根目录。

您也可以直接在img html控件(和其他属性/控件)的src属性中使用相同的ResolveUrl方法的嵌入代码,以防有人遇到同样的问题,但只是html控件。