2011-09-13 98 views
4

嗯,我明白我的標題有點混亂。我將在下面用示例清楚地說明它。如何使用波浪線將相對路徑渲染成jquery/javascript中相對路徑的../../?

<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> 

回答

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。

+0

謝謝!它像一個魅力工作! :) – DEN

+1

我需要它,因爲我必須綁定動態html控制〜/ url – DEN

1

器WebControls當渲染HTML之前在服務器上運行的波浪轉化爲正確的路徑,你會需要的,如果你改變對飛SRC使用完整路徑或相對路徑jQuery中。

您可能希望有根路徑例如頁面上的屬性:ApplicationRootURL,做這樣的事情:

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

看一看VirtualPathUtility Class和msdn的這個信息約ASP.NET project paths

VirtualPathUtility.ToAppRelative方法可能是您正在尋找的。

VirtualPathUtility.ToAppRelative

如果用於應用程序的虛擬路徑是「MyApp的」和虛擬 路徑「/myApp/sub/default.asp」傳遞到ToAppRelative方法, 所得應用程序相對路徑是「〜/ sub/default.aspx」。

它解釋並舉例說明如何在不同的路徑格式之間進行轉換。

我也認爲你應該在服務器級輸出正確的路徑,而不是在瀏覽器的javascript中進行逆向工程。如果你重新安排你的項目並且改變它,它可能會導致問題。

+0

我編輯我的答案,因爲我第一次讀它時誤解了你的問題。 –

5

事實上,隨着波浪的網址都會轉換成絕對URL得益於方法: ResolveURL and ResolveClientURL

因此,你應該能夠做到這一點:

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

(這實際上是自動爲你完成Web控件,如HyperLink等)

當您使用用戶控件時,與這兩種方法有很大的區別。在這種情況下,URL指的是相對於用戶控件所在文件夾的URL,在另一種情況下,該URL將是包含用戶控件的頁面。

另請參見此問題:Control.ResolveUrl versus Control.ResolveClientUrl versus VirtualPathUtility.ToAbsolute