2008-10-26 16 views
6

Sanırım cevabı biliyorum ama bazı fikirlerin etrafında zıplamak istiyorum.ASP.NET MVC'de birden çok nesneyi ViewPage'e nasıl geçiririm?

Birkaç farklı veri parçasını bir Görünüm'e (bu örnekte 2) aktarmak istiyorum. İlk düşüncem, çeşitli objeleri içeren bir nesneye sarmak ve bu şekilde geçmek. Ardından Görünüm'den,

gibi bir şey var ve bunlar Ana Sayfa ve Görünüm Sayfasında bağımsız olarak kullanılabilir.

Bu "en iyi" yol mu?

cevap

11

Görünümler'e sunulacak ek dersler oluşturmayı faydalı buluyorum. Bunları organize tutmak için 'Core.Presentation' adında ayrı bir ad alanında tutuyorum.

public partial class Search : ViewPage<SearchPresentation> 

View Bu şekilde, ben kullanabilirsiniz:

namespace Core.Presentation 
{ 
    public class SearchPresentation 
    { 
     public IList<StateProvince> StateProvinces { get; set; } 
     public IList<Country> Countries { get; set; } 
     public IList<Gender> Genders { get; set; } 
     public IList<AgeRange> AgeRanges { get; set; } 
    } 
} 

Sonra benim Görünüm o sunum sınıfının jenerik sürümünü kullanan bir türü kesin görünüm olduğundan emin olun: İşte bir örnek Intellisense ve kolayca ürünlerde gezin.

1

Aynı dealie devam ediyor. İşte benim çözümüm (en iyi uygulama olmayabilir, ama benim için çalışıyor). (... TFirsts ve TSeconds ve TThirds bazı UZUN olabilir tür kesmesi yararlanmak için)

public class Duo<TFirst,TSecond> { /*...*/ } 
public class Trio<TFirst,TSecond, TThird> { /*...*/ } 

ve onları oluşturmak için bir fabrika nesnesi:

ben "Gruplama" sınıfları oluşturulmuş

public static class Group{ 

public static Duo<TFirst, TSecond> Duo(TFirst first, TSecond second) { 
    return new Duo<TFirst, TSecond>(first, second); 
}  
/*...*/ 
} 

En az yaygara ile bana güvenlik ve intellisense verir. Sadece kokuyor çünkü bunlar aslında tek bir nesnede gerçek bir ilişki olmayan sınıfları bir araya getiriyorsunuz. ViewPage sınıfını ikinci ve üçüncü bir ViewModel eklemek için genişletmek daha iyi olabilir, ancak yaptığım şekilde çok daha az iş gerektirir.

1

Evet, model olarak belirttiğiniz sınıf başka sınıflardan oluşabilir. Ancak, neden sadece şöyle sözlüğü kullanmayın:

ViewData["foo"] = myFoo; 
ViewData["bar"] = myBar; 

Bunun benim için komik bir kokusu vardır başka alakasız nesneler için bir kap olarak modelini tanımlayan tercih olduğunu düşünüyorum.

+1

Bunun en büyük problemi, intelliense ve tip güvenliğinizi kaybetmenizdir. Ayrıca, artık görünüm ve model (derleyici tarafından uygulanamayan) arasında her ikisinin de "foo" ve "bar" ın ne anlama geldiğini bilmesi ve anlaması gerektiğine dair ek bir bağımlılık var. – Will

İlgili konular