2011-10-23 18 views
10

En mi WebGrid que necesito para mostrar las imágenes en función del valor .. Código se da a continuacióncondicionalmente mostrar una imagen en 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" })) 
     )); 

No estoy seguro de cómo puedo usar if en WebGrid. Sólo traté de que no .Su trabajo .getting siguiente error

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

Respuesta

23

En el parámetro del método grid.Columnformat usted está preparando una expresión lambda de manera que por supuesto puede utilizar if. Pero el problema es que no puede usar @ cuando está en "modo de código" en Razor para producir HTML. Así que hay que envolver la creación de la etiqueta imagen en un HtmlHelper (como el construido en Html.ActionLink hay un montón de examples) o utilizar el método HTML.Raw para volver 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" })) 
     )); 

También en la última línea en lugar de new { photoID = @item.Id } usted debe escribir new { photoID = item.Id }
Para obtener más información acerca de la máquina de afeitar aquí hay una detallada tutorial.

+0

genial, gracias por este código! – juFo

+0

Esto funciona muy bien en MVC3. ¿Sabría cómo hacerlo funcionar en MVC4 sin el contenido URL.Contenido? He publicado una nueva pregunta. http://stackoverflow.com/questions/13711753/conditionally-display-an-image-in-webgrid-mvc-4 – Joe

+0

He votado este en el pasado y me ayudó nuevamente. ¡Si pudiera, te daría 100 votos! : D –

Cuestiones relacionadas