2011-08-24 93 views
12

我有一個webgrid,並且有一列我只想對某些用戶可見。 目前我已經編寫電網如下MVC 3 Webgrid - 如何隱藏不想顯示的列?

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

但肯定有不重複所有的代碼更好的辦法? 2列輸入之間唯一的區別是我想顯示特殊用戶的編輯鏈接。那麼,做這件事的最佳替代方法是什麼?

回答

25

嘗試這樣的(未經測試,沒有在目前訪問VS):

@{ 
    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 ......偉大的解決方案達林服用。按預期工作。 –

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

而不是使用像這樣的,你應該以這樣的方式波紋管使用等。我試過了,它會成功的。

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