Условно отобразить изображение в webgrid - 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" }))
         ));

Я не уверен, как использовать if в webgrid. Я просто попробовал это. Он не работает .getting следующую ошибку

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

Ответ 1

В параметре grid.Column format параметра вы объединяете выражение лямбда, чтобы вы могли, конечно, использовать if. Но проблема в том, что вы не можете использовать @, когда находитесь в режиме кода в Razor для вывода HTML. Поэтому вам нужно обернуть создание тега изображения в HtmlHelper (например, встроенный Html.ActionLink есть много примеры) или использовать HTML. Исходный метод для возврата 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" }))
        ));

Также в последней строке вместо new { photoID = @item.Id } вы должны написать new { photoID = item.Id }
Чтобы узнать больше о бритве, здесь приведен подробный tutorial.