有条件地在webgrid中显示图像

时间:2012-12-04 20:55:40

标签: razor asp.net-mvc-4 webgrid

nemesv的代码Conditionally display an image in webgrid - mvc 3在MVC3中运行良好。

@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"));

等。有没有人知道如何在没有URL.Content的情况下让它在MVC4中工作?

谢谢,

1 个答案:

答案 0 :(得分:3)

在这种情况下,如果没有Url.Content

,它将无效

因为~替换仅在您的Razor模板中直接使用时才有效(Razor会在解析您的.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)

第一张图片将正确显示,因为Razor会解析它并执行~替换,但第二张图片不会因为html只是作为字符串写入响应而不涉及解析。