2010-04-20 47 views
5

Bir IList'i kullanıcılar hakkındaki veri modelime döndürüyorum. Son kullanıcılarımızın görmek istedikleri sütunları seçmek için olmasını istiyorum.Bir ASP.NET MVC görünümünde bir tabloya dinamik olarak sütun ekleme

Bunu büyük bir "if ifadesi" ile yapabileceğimi biliyorum, ancak daha iyi bir yol olması gerektiğini biliyorum.

Sütun adları ile bir Enum oluşturdum. Ben IListItem.EnumName alabilseydim hissediyorum olurdu. Ancak, bunun nasıl yapılacağından emin değilim.

Öneriler?

cevap

5

Bunu, bir IColumn arabirimi ve ardından modelimin farklı yönlerini doğru şekilde görüntüleyebilen bir grup sütun sınıfı oluşturarak ele aldım. Görünüm daha sonra her bir sütunu basit bir döngü ile işler. Örneğin: Bu benim için iyi çalışıyor

<tr> 
<% foreach (var column in Model.UserColumns) { %> 
<th><%= column.Title %></th> 
<% } %> 
</tr> 

<% foreach (var item in Model.Items) { %> 
<tr> 
    <% foreach (var column in Model.UserColumns) { %> 
    <td><%: column.Render(item) %></td> 
    <% } %> 
</tr> 
<% } %> 

: Size göre

public interface IColumn 
{ 
    string Title { get; } 
    string Render(MyModelObject obj); 
} 

public class NameColumn : IColumn 
{ 
    public string Title { get { return "Name"; } } 

    public string Render(MyModelObject obj) 
    { 
     return obj.Name; 
    } 
} 

sonra böyle bir şey yapmak!

class UserViewModel 
{ 
    [DisplayName("User name")] 
    public string UserName { get; set; } 

    [DisplayName("E-mail address")] 
    public string Email { get; set; } 

    [DisplayName("Age")] 
    public int Age { get; set; } 
} 

Sonra kolayca yansıma yoluyla özelliklerine erişebilir ve kullanıcı ayarlarında seçilen özellik listesini kaydetmek:

4

Sen yansıma kullanarak düşünebiliriz. Sen (burada değil) çok yansıma yoluyla ekran adını erişebilirsiniz:

var type = typeof(UserViewModel); 
var properties = type.GetProperties(); 

foreach (PropertyInfo property in properties) 
{ 
    Console.WriteLine(property.Name); 
} 

Sen ek türleri ve açıklama oluşturmak gerekmez. Özellikler size görünen ad verir ve yansıtma size liste verir. ASP.NET MVC böyle çalışır. Html.EditorFor (Model) ve diğer birçoğu bu çerçevede kullanmak istediğinizde benzer mekanizma kullanılır.

+0

Bu, aynı zamanda bir modelle (örneğin bir görünüm modeliyle) çalışmalı mıdır? –

+0

@HughSeagraves Evet. – LukLed

İlgili konular