2012-01-20 103 views
4

這聽起來像一個足夠簡單的問題,但找不到我生活中的答案。如何將根相對URL(~/my/path)轉換爲Controller和/或Model中的虛擬路徑(/mywebsite/my/path)?ASP.NET MVC3控制器或模型中虛擬路徑的根路徑相對路徑

在視圖上很容易做到,只需撥打@Url.Content("~/my/path/")即可。使用Server.MapPath("~/my/path")獲得控制器中的物理路徑同樣簡單。但我無法弄清楚如何獲得控制器中的虛擬路徑。

我的主要問題是我有一個圖像的根相對路徑,我將傳遞給將返回的JSON對象。在大多數情況下,這將通過JavaScript讀取並放在網頁上,並且我不能在我的javascript代碼中使用@Url.Content。另外,在某些情況下,這個JSON對象將被外部應用程序使用,它不會理解~的含義。

+0

Url.Content應該也可以在控制器中正常工作(它會返回一個字符串)。它在命名空間System.Web.Mvc – StuartLC

+0

爲什麼你需要到控制器的虛擬路徑? – Phill

+0

@Phill - 我實際上需要一個我在JSON對象中返回的圖像的虛擬路徑。我會更新這個問題。 –

回答

6

在控制器,你可以使用Url屬性:

public ActionResult Foo() 
{ 
    string url = Url.Content("~/my/path"); 
    ... 
} 

在模型你不要做這樣的事。模型不應該知道任何有關URL生成的內容。它根本不是它的責任。如果它需要使用url,則應該通過處理url的應用程序層(這些層可以訪問HttpContext)將這個url傳遞給它。