2011-08-24 20 views
12

Webgrid'im var ve sadece belirli kullanıcılara görünmek istediğim bir sütun var.MVC 3 Webgrid - görünmesini istemediğiniz sütunları nasıl gizlersiniz?

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

şöyle Şu anda ızgara kodlu var Ama kesinlikle tüm bu kodu tekrarlamadan daha iyi bir yolu var mı? 2 sütun girişi arasındaki tek fark, partikül kullanıcıları için Düzenle bağlantısını görüntülemek istiyorum. Peki bunu yapmanın en iyi alternatif yolu nedir?

cevap

25

(şu anda VS'ye erişimi yoktur, denenmemiş) böyle deneyin:

@{ 
    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 ... harika bir çözüm Darin 'dan alınmıştır. Beklendiği gibi çalışıyor. –

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

yerine bunu böyle kullanmanın size bir şekilde feryat gibi kullanmalıdır. Denedim, başarılı bir şekilde çalışacak.

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