2012-03-25 81 views
11

在我的剃鬚刀式的輔助類(位於App_Code文件夾中,我有這行代碼:如何在ASP.Net MVC剃刀幫手指定圖像的虛擬路徑

<img src="../../Content/images/ajax_activity.gif" alt="loading"/> 

這工作正常。卡西尼,但是當我部署的應用到IIS(虛擬目錄),IIS無法找到路徑的虛擬路徑被忽略 這也不起作用。

<img src="@Href("~/Content/images/ajax_activity.gif")" alt="loading" /> 
+0

'這也不行'...爲什麼不呢?請向我們展示生成的HTML。 – SLaks 2012-03-25 23:10:45

+0

嗨SLaks。由於這是一個jQuery對話框中的ajax調用,沒有辦法(至少我不知道)看到生成的源代碼,但在Firebug中看到它,我收到以下錯誤消息:「NetworkError:404 Not找到 - http://localhost/Content/images/ajax_activity.gif「。我已經將虛擬目錄設置爲Merkur,所以真正的路徑應該是http://localhost/Merkur/Content/images/ajax_activity.gif。 – zszep 2012-03-26 19:12:20

+0

另一件事。上述兩個示例在視圖內調用時都可以正常工作。這個問題似乎與幫助程序位於App_Code目錄中有關(需要它們在那裏,因爲我從多個視圖調用它們)。 – zszep 2012-03-26 19:17:25

回答

6

好的,解決了它,但我不確定它爲什麼工作。嘗試所有以下組合沒有成功後:

<img src="../Content/images/ajax_activity.gif" alt="loading"/> 
<img src="/Content/images/ajax_activity.gif" alt="loading"/> 
<img src="~/Content/images/ajax_activity.gif" alt="loading"/> 
<img src="Content/images/ajax_activity.gif" alt="loading"/> 

下面終於發揮預期

<img src="./Content/images/ajax_activity.gif" alt="loading"/> 

它與虛擬目錄上設置正確返回圖像路徑。任何人都可以解釋這一點?

+2

延遲迴復,但'。/ Stuff/foo.bar'將在應用程序的基本目錄中查找'Stuff/foo.bar'。 '〜/ Stuff/foo.bar'對應於你假定沒有配置的虛擬路徑。 '../ Stuff/foo.bar'是在'Stuff/foo.bar'的父目錄中查找的相對路徑。 'Stuff/foo.bar'看起來在當前目錄中,'/ Stuff/foo.bar' ..好吧,我無法解釋那一個。我本來期望那個人也可以查看基本目錄。在嘗試修復類似解決方案時遇到了這個問題。要點是這些都可以不同,這就是爲什麼它可能無法正常工作。 – 2014-08-18 08:45:36

+0

不會Stuff/foo.bar是當前目錄中的「Stuff子目錄」嗎? – zszep 2014-08-18 12:08:50

+0

對,對不起,我的意思是'Stuff/foo.bar'會在'Stuff/foo.bar'的當前目錄中查找 – 2014-08-18 14:13:55

27

試試這個:

<img src="@Url.Content("~/Content/images/ajax_activity.gif")" alt="loading" /> 
+0

這會導致以下編譯器錯誤:CS0103:名稱'Url'在當前上下文中不存在 – zszep 2012-03-25 23:14:53

+1

這對我有效。可能更適用於更廣泛的環境。 – Jordan 2014-01-17 20:33:20

0

當您在IIS中的虛擬目錄中進行部署時,應用程序根目錄可能與您在開發環境中的不同。

如果您的應用程序網址SI像

http://localhost/MyWebApp/ 

ASP.NET會考慮的根源是「本地主機」,當它應該是「MyWebApp」。

要解決此問題,您必須將虛擬目錄轉換爲應用程序:在IIS管理器中,找到您的目錄,右鍵單擊它,然後單擊「轉換爲應用程序」。

1

你可以使用@Url.Content方法將虛擬相對路徑轉換成這樣絕對的應用程序路徑:

<img [email protected]("~/images/picture.png") alt="picture description"> 

它會在轉發給客戶端HTML代碼轉換:

<img src="/appname/images/picture.png" alt="picture description"> 

更新: 另一方面,你可以將圖像轉換爲base64,它也會正確顯示:

<img src="data:image/png;base64,iVBORw0KG...SuQmCC" alt="picture description">