2011-10-23 35 views
10

Trong webgrid của tôi, tôi cần phải hiển thị hình ảnh dựa trên giá trị .. Mã được đưa ra dưới đâycó điều kiện hiển thị một hình ảnh trong webgrid - MVC 3

@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" })) 
     )); 

Tôi không chắc chắn làm thế nào tôi có thể sử dụng if trong webgrid. Tôi chỉ cố gắng đó .Its không .getting làm việc sau lỗi

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

Trả lời

23

Trong tham số format các grid.Column phương pháp của bạn đang đặt cùng một biểu thức lambda để bạn có thể sử dụng tất nhiên if. Nhưng vấn đề là bạn không thể sử dụng @ khi bạn đang ở "chế độ mã" trong Razor để xuất HTML. Vì vậy, bạn cần phải quấn tạo thẻ hình ảnh thành một HtmlHelper (như việc xây dựng trong Html.ActionLink có rất nhiều examples) hoặc sử dụng các phương pháp HTML.Raw trở về 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" })) 
     )); 

Cũng trong dòng cuối cùng thay vì new { photoID = @item.Id } bạn nên viết new { photoID = item.Id }
Để tìm hiểu thêm về dao cạo ở đây là chi tiết tutorial.

+0

tuyệt vời, cảm ơn mã này! – juFo

+0

Điều này làm việc tuyệt vời trong MVC3. Bạn có biết làm thế nào để làm cho nó hoạt động trong MVC4 mà không có URL.Content. Tôi đã đăng một câu hỏi mới. http://stackoverflow.com/questions/13711753/conditionally-display-an-image-in-webgrid-mvc-4 – Joe

+0

Tôi đã bỏ phiếu này trong quá khứ và nó đã giúp tôi một lần nữa. Nếu tôi có thể cho bạn 100 phiếu bầu! : D –

Các vấn đề liên quan