【问题标题】:Conditionally display an image in webgrid - mvc 3有条件地在 webgrid 中显示图像 - mvc 3
【发布时间】:2011-12-13 13:01:08
【问题描述】:

在我的 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" }))
         ));

我不确定如何在 webgrid 中使用 if。我刚试过。它不起作用。出现以下错误

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

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-3 razor grid webgrid


    【解决方案1】:

    grid.Column 方法的format 参数中,您将组合一个lambda 表达式,这样您当然可以使用if。但问题是当您在 Razor 中处于“代码模式”输出 HTML 时,您不能使用@。所以你需要将创建的图片标签包装到一个HtmlHelper中(比如内置的Html.ActionLink有很多examples)或者使用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" }))
            ));
    

    同样在最后一行而不是new { photoID = @item.Id } 你应该写new { photoID = item.Id }
    要了解有关剃须刀的更多信息,请点击此处详细了解 tutorial

    【讨论】:

    • 这在 MVC3 中效果很好。你知道如何让它在没有 URL.Content 的情况下在 MVC4 中工作吗?我发布了一个新问题。 stackoverflow.com/questions/13711753/…
    • 我过去投了这个票,它再次帮助了我。如果可以的话,我会给你100票! :D
    • @LenielMacaferi 很高兴我的回答对你有所帮助 :) 你知道有一个 bounty system on SE ;)
    • 是的,我知道。赏金系统适用于没有公认答案并且希望其他人对未回答的问题给出更好答案的情况。 :)
    • 太好了,我挣扎了一个多小时才得到这个……谢谢
    猜你喜欢
    • 1970-01-01
    • 2011-11-13
    • 2012-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-03
    • 2012-07-15
    相关资源
    最近更新 更多