有条件地在webgrid中显示图像 - mvc 3

Nul*_*ter 10 asp.net-mvc grid webgrid razor asp.net-mvc-3

在我的webgrid中,我需要根据值显示图像.代码如下

@model TraktorumMVC.Models.ManagePhotos
@{
    ViewBag.Title = "ManagePhotos";
    Layout = "~/Views/Shared/_Layout.cshtml";
    var grid = new WebGrid(Model.AdPhotos);
}


    @grid.GetHtml(
       displayHeader: false,
       columns: grid.Columns(
             grid.Column(format: (item) =>
                 {
                     if (item.IsMainPreview == true)
                     {
                         return @<text><img src="@Url.Content("~/Content/images/preview-photo.gif")" alt="Image "/></text>;
                     }
                     else
                     {
                         return @<text><img src="@Url.Content("~/Content/images/non-preview-photo.gif")" alt="Image "/></text>;
                     }
                 }
                ),               
             grid.Column(format: (item) => Html.ActionLink("Remove Photo", "RemovePhoto", "Images", new { photoID = @item.Id }, new { @class = "RemovePhoto" }))
         ));
Run Code Online (Sandbox Code Playgroud)

我不确定如何if在webgrid中使用.我只是尝试过.它不工作.忘记跟随错误

The best overloaded method match for 'System.Web.Helpers.WebGrid.Column(string, string, System.Func<dynamic,object>, string, bool)' has some invalid arguments
Run Code Online (Sandbox Code Playgroud)

nem*_*esv 24

grid.Column方法的format参数中,您将一个lambda表达式组合在一起,以便您可以使用它if.但问题是@当您在Razor中的"代码模式"输出HTML时,您无法使用.因此,您需要将图像标记创建包装到HtmlHelper中(如内置Html.ActionLink有大量示例)或使用HTML.Raw方法返回HTML:

@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")));
                    }
                    else
                    {
                        return Html.Raw(string.Format("<text><img src=\"{0}\" alt=\"Image\"/></text>", Url.Content("~/Content/images/non-preview-photo.gif")));                         
                    }
                }
            ),               
            grid.Column(format: (item) => Html.ActionLink("Remove Photo", "RemovePhoto", "Images", new { photoID = item.Id }, new { @class = "RemovePhoto" }))
        ));
Run Code Online (Sandbox Code Playgroud)

也是在最后一行,而不是new { photoID = @item.Id }你应该写.new { photoID = item.Id }
要了解更多关于剃刀这里是一个详细的教程.