2011-05-12 28 views
6

Soy nuevo en MVC3. Estoy usando un WebGrid para mostrar algunas columnas en un sitio para una subasta en la que estoy trabajando. Esto muestra una grilla que muestra las últimas ofertas. Cuando alguien, excepto un administrador inicie sesión, solo debería ver los montos y la fecha/hora de la oferta. Cuando un administrador inicia sesión, deberían ver todas las columnas (nombre e información de contacto). Estoy pensando que probablemente tenga que dar masajes a esto en código de alguna manera, pero me preguntaba si hay una forma de manejarlo en el marcado Razor. Aquí es la que tengo ahora:Cómo ocultar columnas en WebGrid?

  @{ var grid = new WebGrid(Model.Bids.OrderByDescending(b => b.BidAmount)); } 
     @grid.GetHtml(
     tableStyle: "grid", 
     headerStyle: "head", 
     alternatingRowStyle: "alt", 
     columns: grid.Columns(
      grid.Column("BidAmount", format: @<text>[email protected]</text>), 
      grid.Column("BidDateTime"), 
      grid.Column("FirstName"), 
      grid.Column("LastName"), 
      grid.Column("Email"), 
      grid.Column("PhoneNumber") 
      ) 
     ) 

Así que lo que quiero hacer, en pseudo código, es algo como esto:

   @{ var grid = new WebGrid(Model.Bids.OrderByDescending(b => b.BidAmount)); } 
      @grid.GetHtml(
      tableStyle: "grid", 
      headerStyle: "head", 
      alternatingRowStyle: "alt", 
      columns: grid.Columns(
       grid.Column("BidAmount", format: @<text>[email protected]</text>), 
       grid.Column("BidDateTime"), 
@if(userIsAdmin){ 
       grid.Column("FirstName"), 
       grid.Column("LastName"), 
       grid.Column("Email"), 
       grid.Column("PhoneNumber") 
       ) 
     }  
    ) 

Puede hacerse esto? Si no, ¿alguna idea sobre cómo abordarlo? ¿Tendría que codificar dos WebGrid diferentes y rodearlos con un if() tal vez?

+0

¿Has intentado rodear una sola columna con un control condicional? (No estoy seguro de si eso es posible.) Algo como: if (isAdmin) {grid.Column (...)} – JasCav

+0

@Todd ¿Recibió alguna solución para esto? Si es así, ¿puedes publicarlo aquí? – pramodtech

+2

http://stackoverflow.com/questions/7172420/mvc-3-webgrid-how-do-you-hide-columns-you-do-not-want-to-be-visible – muthuvel

Respuesta

5

Si en primer lugar componer la lista de columnas en el primer bloque de código en una variable (cols):

@{ 
var grid = ...; 
IEnumerable<WebGridColumn> cols = grid.Columns(... the common columns ...); 
if (isAdmin) 
    cols = cols.Concat(grid.Columns(... the admin columns ...); 
} 

y pasarlo a la GetHtml) método (:

@grid.GetHtml(... 
      columns: cols); 

pienso para el método Concat necesita un espacio de nombres usando System.Linq como de costumbre. Alternativamente, puede usar un List<WebGridColumns> y usar AddRange.

El punto es que GetHtml espera un IEnumerable<WebGridColumn> para el parámetro de columnas. El método grid.Columns helper no es más que un método con un parámetro de matriz params para que pueda simplemente "enumerar" las columnas una después de la otra, pero en realidad usted compone una matriz params de esta manera. Sin embargo, puede usar cualquier método válido que pueda imaginar en C# para componer una lista (IEnumerable) de columnas y luego puede pasarlo a GetHtml.

Cuestiones relacionadas