2011-05-12 82 views
6

我是MVC3新手 - 我正在使用WebGrid在網站上顯示我正在進行的拍賣的一些列。這將顯示一個顯示最新出價的網格。除了管理員登錄以外,他們只能看到出價金額和日期/時間。當管理員登錄時,他們應該看到所有列(名稱和聯繫信息)。我想我可能不得不在某種程度上以代碼的形式對此進行按摩,但我想知道是否有辦法在Razor標記中處理它?這裏是我現在有:如何隱藏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") 
      ) 
     ) 

所以我想做的事,在僞代碼,是這樣的:

   @{ 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") 
       ) 
     }  
    ) 

可以這樣做?如果沒有,關於如何處理它的任何想法?我需要編寫兩個不同的WebGrid,並用if()包圍它們嗎?

+0

你有沒有嘗試用條件檢查圍繞單個列? (不知道這是可能的。)是這樣的:if(isAdmin){grid.Column(...)} – JasCav 2011-05-12 17:23:04

+0

@Todd你得到這個解決方案嗎?如果是的話,你可以在這裏發佈嗎? – pramodtech 2011-08-23 06:41:19

+2

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

回答

5

如果將第一組成的第一碼塊列的列表到一個變量(COLS):

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

並把它傳遞給GetHtml()方法:

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

我想對於Concat方法,您需要像往常一樣使用System.Linq的命名空間。或者,您可以使用List<WebGridColumns>並使用AddRange。

問題是,GetHtml期望IEnumerable<WebGridColumn>的列參數。 grid.Columns幫助器方法只不過是一個帶有params數組參數的方法,這樣你就可以一個接一個地「列出」列,但實際上你是用這種方式組成params數組的。但是,可以使用C#中可以想象的任何有效方法來組合列的列表(IEnumerable),然後可以將它傳遞給GetHtml。