如何将相对路径与波浪线渲染到jquery / javascript中的相对路径的../../?

时间:2011-09-13 06:57:37

标签: c# javascript jquery asp.net html

嗯,我明白我的头衔有点令人困惑。我将在下面用示例清楚地说明。

<asp:ImageButton ID="imgButton" NavigateUrl="~/Presentation/Resources/Images/addFile.png" runat="server" />

在html中,上面的控件将呈现为

<input type="image" name="imgButton" id="imgButton" src="../../Resources/Images/addFile.png" style="border-width:0px;">

我注意到,它会将src从“〜”转换为“../../”。它会自动安排它将文件级别。

所以在javascript中,我想用这个url设置控件:

  

〜/演示/资源/图像/ PDF.png

不幸的是,在html中它将呈现为

<input type="image" name="imgButton" id="imgButton" src="~/Presentation/Resources/Images/addFile.png" style="border-width:0px;">

我的问题是,如果我想用“〜”获得“../../”相对路径,我该怎么写? 我试过这个,但我无法得到它。

<script type="javascript">
document.getElementById("<%= imgButton.ClientID %>").src = 
"~/Presentation/Resources/Images/PDF.png";
</script>

4 个答案:

答案 0 :(得分:9)

试试这个:http://weblogs.asp.net/joelvarty/archive/2009/07/17/resolveurl-in-javascript.aspx

  

在网站的母版页中,输入:

<script type="text/javascript">
        var baseUrl = "<%= ResolveUrl("~/") %>";
</script>
  

然后,在你的javascript文件中,输入这个函数:

function ResolveUrl(url) {
    if (url.indexOf("~/") == 0) {
        url = baseUrl + url.substring(2);
    }
    return url;
}
  

您可以将该功能放在母版页中,但是您可以   对于其余的代码,它不会有智能感。轮到你了   可以使用〜/ right从javascript调用ResolveUrl。

为什么在客户端需要这个?使用servercontrols(runat=server),您可以使用代字号来解析服务器上的URL。

答案 1 :(得分:5)

实际上,由于以下方法,使用波浪号的URL会转换为绝对URL: ResolveURL and ResolveClientURL

因此你应该能够这样做:

<input type="image" name="imgButton" id="imgButton" src="<%=this.ResolveClientUrl("~/Resources/Images/addFile.png")%>" style="border-width:0px;">

(这实际上是在HyperLink等Web控件中自动完成的)

当您使用用户控件时,会发生与这两种方法的巨大差异。在一种情况下,URL指的是相对于用户控件所在文件夹的URL,在另一种情况下,是指包含用户控件的页面。

另请参阅此问题:Control.ResolveUrl versus Control.ResolveClientUrl versus VirtualPathUtility.ToAbsolute

答案 2 :(得分:1)

WebControls在渲染html之前在服务器上运行时将波浪号转换为正确的路径,如果您正在动态更改src,则需要使用jQuery中的完整路径或相对路径。

您可能希望在页面上有一个具有根路径的属性,例如:ApplicationRootURL并执行以下操作:

<script type="javascript">
document.getElementById("<%= imgButton.ClientID %>").src = 
"<%=ApplicationRootURL%>/Presentation/Resources/Images/PDF.png";
</script>

答案 3 :(得分:1)

查看VirtualPathUtility Class以及来自msdn的有关ASP.NET project paths的信息。

您可能正在寻找VirtualPathUtility.ToAppRelative方法。

  

VirtualPathUtility.ToAppRelative

     

如果应用程序的虚拟路径是“myapp”和虚拟路径   将路径“/myApp/sub/default.asp”传递给ToAppRelative方法,   生成的应用程序相对路径为“〜/ sub / default.aspx”。

它解释并给出了如何在不同路径格式之间进行转换的示例。

我还认为您应该在服务器级输出正确的路径,而不是在浏览器中的javascript中进行逆向工程。如果您重新安排项目并且asp更改它,可能会导致问题。