1

nemesv 的代码有条件地在 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 中工作?

谢谢,

4

1 回答 1

3

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

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

但是grid.GetHtml将返回渲染的 html,该 html 在没有任何 Razor 解析的情况下写入响应。

您可以使用以下代码片段对其进行测试(只需复制到 any 中.cshtml):

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

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

@Html.Raw(img)

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

于 2012-12-04T21:18:51.983 回答