2012-12-04 44 views
1

nemesv的代碼Conditionally display an image in webgrid - mvc 3在MVC3中很有效。有條件地在webgrid中顯示圖像

@grid.GetHtml(
    displayHeader: false, 
    columns: grid.Columns(
      grid.Column(format: (item) => 
      { 
       if (item.IsMainPreview == true) 
      { 
       return Html.Raw(string.Format("<text><img src=\"{0}\" alt=\"Image\"/></text>", Url.Content("~/Content/images/preview-photo.gif"))); 
      } 

在MVC4你不需要Url.Content使用 「〜」。如果沒有Url.Content(無法找到圖像),我還沒有成功實現代碼的工作。我曾嘗試

return Html.Raw(string.Format("<text><img src=\"{0}\" alt=\"Image\"/></text>", "~/Content/images/preview-photo.gif")); 

return Html.Raw(string.Format("<text><img src={0} alt=\"Image\"/></text>", "~/Content/images/preview-photo.gif")); 

等等。有沒有人知道如何得到這個工作在MVC4沒有URL.Content?

謝謝

回答

3

這這種情況下,不無Url.Content

因爲如果你在你的剃鬚刀模板直接擁有它的~更換隻能工作(剃刀這是否更換時,它分析你的.cshtml並生成響應)。

grid.GetHtml將返回呈現的HTML,它會被寫入響應而沒有任何Razor解析。

你可以用下面的代碼片段(直接複製到任何.cshtml)測試:

<img src="~/Content/images/preview-photo.gif" /> 

@{ 
    var img = "<img src=\"~/Content/images/preview-photo.gif\" />"; 
} 

@Html.Raw(img) 

因爲剃刀對其進行解析並執行~更換,但第一個圖像會正確顯示第二不會因爲HTML只是寫入響應中的字符串,並且不涉及解析。