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中工作?
谢谢,
答案 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只是作为字符串写入响应而不涉及解析。