2011-08-24 21 views
12

Tengo una red web y hay una columna que quiero que sea visible solo para ciertos usuarios. Actualmente tengo codificado la red de la siguiente maneraMVC 3 Webgrid: ¿cómo se ocultan las columnas que no quiere que sean visibles?

if (Context.User.IsInRole(Role.Inputter) || Context.User.IsInRole(Role.Administrator)) 
{ 
    @grid.GetHtml(columns: grid.Columns(
     grid.Column(format: (item) => Html.ActionLink("Select", "Details", new { contractId = item.ContractId })), 
     grid.Column(format: (item) => Html.ActionLink("Edit", "Edit", new { contractId = item.ContractId })), 
     grid.Column("SignOffDate", "Sign Off Date", 
      format: @<text> <span>@item.SignOffDate.ToString("d/M/yyyy")</span></text>), 
     grid.Column("FullContractNumber", "Contract Number"), 
     grid.Column("ContractTitle", "Title") 
    )); 
} 
else 
{ 
    @grid.GetHtml(columns: grid.Columns(
     grid.Column(format: (item) => Html.ActionLink("Select", "Details", new { contractId = item.ContractId })), 
     grid.Column("SignOffDate", "Sign Off Date", 
      format: @<text> <span>@item.SignOffDate.ToString("d/M/yyyy")</span></text>), 
     grid.Column("FullContractNumber", "Contract Number"), 
     grid.Column("ContractTitle", "Title") 
    )); 
} 

Pero sin duda hay una mejor manera sin repetir todo ese código? La única diferencia entre las 2 entradas de columna es que quiero mostrar el enlace Editar para usuarios particulares. Entonces, ¿cuál es la mejor manera alternativa de hacer eso?

Respuesta

25

Trate como esto (no probado, no tienen acceso a VS por el momento):

@{ 
    var gridColumns = new List<WebGridColumn>(); 
    gridColumns.Add(grid.Column(format: (item) => Html.ActionLink("Select", "Details", new { contractId = item.ContractId }))); 
    if (Context.User.IsInRole(Role.Inputter) || Context.User.IsInRole(Role.Administrator)) 
    { 
     gridColumns.Add(grid.Column(format: (item) => Html.ActionLink("Edit", "Edit", new { contractId = item.ContractId }))); 
    } 
    gridColumns.Add(grid.Column("SignOffDate", "Sign Off Date", format: @<text> <span>@item.SignOffDate.ToString("d/M/yyyy")</span></text>)); 
    gridColumns.Add(grid.Column("FullContractNumber", "Contract Number")); 
    gridColumns.Add(grid.Column("ContractTitle", "Title")); 
} 

@grid.GetHtml(columns: grid.Columns(gridColumns.ToArray())); 
+2

WOW ... gran solución Darin. Trabajando como se esperaba –

1
grid.Column("FriendlyId", style:"hidecol",header:"") 

en lugar de usarlo como esto se debe utilizar al igual que en la forma abajo. Lo he intentado, funcionará con éxito.

grid.Column(format: @<input type="hidden" name="FriendlyId" value="@item.FriendlyId" />) 
Cuestiones relacionadas