Conditionally display an image in webgrid

て烟熏妆下的殇ゞ 提交于 2019-12-24 08:18:48

问题


nemesv's code Conditionally display an image in webgrid - mvc 3 works great in 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")));
             }

In MVC4 you don't need Url.Content to use the "~". I haven't been succesful in getting the code to work without the Url.Content (it can't find the image). I have tried

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

and

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

among others. Does anyone know how to get this to work in MVC4 without the URL.Content?

Thank you,


回答1:


It this case it doesn't work without the Url.Content

Because the ~ replacement only works if you have it directly in your Razor template (Razor does this replacement when it parses your .cshtml and generates the response).

But the grid.GetHtml will return the rendered html which gets written into the response without any Razor parsing.

You can test it with the following code snippet (just copy into any .cshtml):

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

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

@Html.Raw(img)

The first image will be displayed correctly because Razor parses it and does the ~ replacement but the second won't because the html just written as a string into the response and no parsing is involved.



来源:https://stackoverflow.com/questions/13711753/conditionally-display-an-image-in-webgrid

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!