2011-05-12 26 views
6

Ben MVC3 için yeni - Üzerinde çalışıyorum bir açık artırma için bir sitede bazı sütunları görüntülemek için bir WebGrid kullanıyorum. Bu, son teklifleri gösteren bir ızgara görüntüler. Bir yönetici hariç herhangi biri oturum açtığında, yalnızca teklif tutarlarını ve tarih/saati görmelidir. Bir yönetici giriş yaptığında, tüm sütunları görmelidir (isim ve iletişim bilgileri). Sanırım bir şekilde bu kodu bir şekilde tedavi etmek zorunda kalacağım, ama Razor markasında bunu halletmenin bir yolu olup olmadığını merak ediyordum? İşte Şimdi sahip olduğu: buWebGrid'de Sütunları nasıl gizlenir?

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

Yapılabilir:

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

Yani sahte kodda, ne yapmak istediğinizi, böyle bir şey mi? Yoksa, nasıl yaklaşacağınıza dair herhangi bir fikir var mı? İki farklı WebGrid'i kodlamalı mıyım ve bir if() ile çevreleyebilir miyim?

+0

Koşullu bir denetim içeren tek bir sütunu çevrelemeyi denediniz mi? (Bunun mümkün olup olmadığından emin değil.) Şunlar gibi: if (isAdmin) {grid.Column (...)} – JasCav

+0

@Todd bunun için bir çözüm buldunuz mu? Eğer cevabını buraya yazabilirsen? – pramodtech

+2

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

cevap

5

ise ilk (sütun) bir değişkene ilk kod bloğunda sütunların listesini oluşturmak olacaktır:

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

Ve GetHtml iletecek() yöntemi:

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

bence Concat yöntemi için her zamanki gibi System.Linq için bir ad alanına ihtiyacınız vardır. Alternatif olarak, List<WebGridColumns>'u kullanabilir ve AddRange'ı kullanabilirsiniz.

Buradaki nokta, GetHtml sütun parametresi için IEnumerable<WebGridColumn> beklemesidir. Kılavuzlar. Yardımcılar yöntemi, params dizisi parametresine sahip bir yöntemden başka bir şey değildir, böylece sütunları birbiri ardına sıralayabilirsiniz, ancak aslında bu şekilde bir param dizisi oluşturursunuz. Bununla birlikte, sütunların bir listesini (IEnumerable) oluşturmak için C# olarak hayal edebileceğiniz geçerli yöntemleri kullanabilir ve daha sonra GetHtml'ye iletebilirsiniz.