2011-08-24 13 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列の入力の唯一の違いは、particlaurユーザー用の[編集]リンクを表示することです。では、これを行うための最良の代替手段は何ですか?

答えて

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

から撮影

WebGrid obj = new WebGrid(Custs,columnNames: new[] { "CustomerCode"}); 

。期待どおりに働く。 –

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

代わりに、このようにそれを使用するあなたはマナー怒鳴るでのようにそれを使用する必要があります。私は試しましたが、正常に動作します。

grid.Column(format: @<input type="hidden" name="FriendlyId" value="@item.FriendlyId" />) 
関連する問題