【问题标题】:Conditionally display an image in webgrid有条件地在 webgrid 中显示图像
【发布时间】:2012-12-04 20:55:39
【问题描述】:

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 中工作?

谢谢,

【问题讨论】:

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


    【解决方案1】:

    在这种情况下,如果没有Url.Content,它就无法工作

    因为 ~ 替换仅在您将它直接放在 Razor 模板中时才有效(Razor 在解析您的 .cshtml 并生成响应时会执行此替换)。

    grid.GetHtml 将返回渲染后的 html,该 html 会写入响应中而无需任何 Razor 解析。

    你可以用下面的代码 sn-p 测试它(只需复制到任何.cshtml):

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

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

    【讨论】:

      猜你喜欢
      • 2011-12-13
      • 1970-01-01
      • 2012-07-15
      • 2018-09-27
      • 2014-08-28
      • 1970-01-01
      • 2012-03-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多