2013-07-08 115 views
2

我在我的視圖中隨處可見Url.Content()片段。他們在使用簡單網址的網頁上工作得很好,但當網址變長時則無法正常工作。Url.Content()不適用於複雜的URL

下面是一個示例:

<img src="@Url.Content("~/Content/Images/logo.png")" id="logo"> 

時,我也能正常工作的網頁上,或URL localhost:8080/s/chocolate(它顯示了「巧克力」搜索結果的頁面

但是,當我試圖添加一些改進,例如localhost:8080/s/chocolate/b/lindt(意思是將以前的結果過濾爲品牌Lindt中的結果),但它不再有效。在這種情況下,Url.Content指向/s/chocolate/Content/Images/logo.png,這明顯失敗。

這就好像Url.Content只在當前位置上升兩級而不是使用網絡應用的真實根。我認爲在約定中,URLs的形式是host/controller/action,但在這裏我有一個更復雜的URL方案(我使用URL重寫器模塊將這些URL片段與操作參數相匹配)。

有沒有辦法告訴幫手去真正的根,或任何其他解決方案來解決這個問題?

(順便說一句,我使用MVC 4)


編輯: 正如菲利普回答,我才發現,原來Url.Content不再需要用MVC 4,對所有作品「設計」圖像具有不變的路徑。然而,我使用很多圖像,其中路徑部分由一些數據構成,例如,

<img src="@Url.Content(string.Format("~/Content/Images/stores/{0}.png", cart.Store.Retailer.Id))"/> 

我簡單地除去Url.content,因爲這樣的:

<img src="@string.Format("~/Content/Images/stores/{0}.png", Model.PreferedCart.Store.Retailer.Id)"/> 

在呈現時,這給出了以下的src:~/Content/Images/stores_v2/Fr_SimplyMarket.png~仍然在這裏,沒有找到圖像。我該如何解決這個問題?

回答

10

在ASP.NET MVC 4+中,您無需在屬性值中使用Url.Content。直接使用~/語法,並讓razor view engine 2爲您處理路徑。

<img src="~/Content/Images/logo.png" id="logo"> 

在這種情況下,你需要創建一個動態的路徑,所以,你必須使用Url.Content,樣品:

@{ 
    string imagePath = Url.Content("~/Content/Images/stores/" + Model.PreferedCart.Store.Retailer.Id + ".png"); 
} 
<img src="@imagePath"/> 

如果它不工作,那麼你的例子可以如下編碼,原因是你的URL重寫器有問題。

+0

它的作品就像一個魅力,但我試圖從App_Data文件夾而不是內容文件夾中獲取圖像。不知何故,它不工作。任何想法 –

相關問題