2011-03-24 22 views
2

我有一個javascript應用程序在視圖(index.cshtml)中運行Asp MVC 3:動態解析視圖中的相對資源

問題:
的問題是所有相對路徑相對於當前URL,這將是一個簡單的HTML Web應用程序確定,但不是在ASP MVC。 js-app不必擔心它是否在正常的html文件中或通過asp mvc頁面提供。

I.e. http://www.domain.com/<controller>/<action>/包含腳本test.js。該腳本加載一個外部xml文件搜索相對於它即ie。 「data/data.xml」。結果網址爲http://www.domain.com/<controller>/<action>/data/data.xml。這沒找到。

問:
有沒有辦法路由靜態文件(圖片,...,甚至js文件)像「〜/內容/控制器/動作/ <pathToFile>/內容的文件夾「?

任何幫助表示讚賞!

了Lg warappa

PS:我知道Url.Content(),但不適合在這裏。

回答

2

的解決方案不要求映射。

1

你可以使用絕對URL地址來訪問你的靜態資源:

$('img').attr('src', '/Content/Pictures/picture1.png'); 

<script src="/Scripts/script.js"></script> 

這樣你就百達獲得相對於頁面基址相同的資源,無論是如果您在/{Controller}/{Action}/{View}{Area}/{Controller}/{Action}/{View},自定義路徑或甚至在靜態腳本html頁面中加載腳本。

或者您正在尋找的是使用CSS文件,因爲CSS的url('<path>')解析了相對於CSS文件位置的地址。您只需導入具有所有資源(圖像?)文件路徑的一個CSS文件。然後腳本可以引用不同的類名,因此根本不是位置感知。這就像jQuery UI所做的那樣。但是,這又需要一個相對於CSS文件的固定文件夾結構。

<base href="@(Request.Url.GetComponents(UriComponents.SchemeAndServer, UriFormat.Unescaped) + 
    Url.Content("~/content/controller/action/"))" /> 

了Lg warappa

編輯
一些瀏覽器需要一個絕對URL - 示例更新:在頭只是一個簡單的HTML標記 -

+0

當然,但比應用程序知道它的位置(「所以我在一個Asp MVC的Web應用程序...」)。我正在尋找一個解決方案,重新組裝一個普通的html行爲。無論如何感謝 – 2011-03-24 08:21:17

+0

不,它不知道它是一個Asp.net MVC應用程序,它只是具有必需的結構。如果你願意,你可以在php腳本中使用相同的腳本,但是你需要保留靜態文件目錄。 – m0sa 2011-03-24 08:25:26

+0

好的,我不夠精確。 我更喜歡js-app只是「看到」「css/style.css」或「images/background.jpg」 - 相對路徑的解決方案。 開始斜槓的另一個問題是你期望它不在虛擬路徑中 - 在我的特例中這是錯誤的。 – 2011-03-24 08:30:46