2009-04-01 18 views
5

Yeni ASP .NET MVC çerçevesini öğrenmeye çalışıyorum ve UserControls kullanımıyla ilgili en iyi uygulamayı öğrenmek istiyorum.ASP .NET MVC doğru UserControl mimarisi

UserControl'leri bir kısmi olarak görüntüleyebileceğinizi ve onlara bir denetleyiciden veri aktarabileceğinizi anlıyorum. İdeal olarak, MVC kurallarını bozmak için bir cazibeye yol açtığından, dosyanın arkasında bir kodun olmamasının mantıklı olduğunu düşünürdüm.

UserControls'ın desene nasıl uyduğunu anlamadığım bir örnek vereceğim.

I (çok StackOverflow'daki gibi) son etiketleri gösterir bir UserControl var. StackOverflow I 'un aksine, bu UserControl'ü tüm sayfalarımda 'da görüntülemek istiyorum. Bir denetleyicim varsa, 'dan gelen eylemleri işlemek anlamına gelen QuestionController söz konusudur. viewer ve detay, buSoru Kontrol Aracı ve verileri daha sonra UserControl'e iletmek zorunda mıyım?

başka denetleyici oluşturursanız

aynı işlevselliği son etiketleri yine kısmi geçmek için olsun çoğaltmak SearchController sonra olurdu söylüyorlar. Bu, 'un 2 farklı kontrolörün orijinal olarak yapması amaçlanmayan fazladan şeyler yapmadığı anlamına gelmez mi?

cevap

4

sizin UserControl her sayfasında görünüyorsa, o zaman tek yönlü bu OnActionExecuting yöntemi geçersiz ve mantık koyarak UserControl ViewData denetleyicileri tüm türetildiği bir taban denetleyici kullanmak ve üretmek olacaktır ele Orada. UserControl'ünüz daha az yaygınsa, ancak yine de sitenin genelinde sık kullanılıyorsa, ActionFilterAttribute'u genişletebilir ve filtrenizin gerekli verileri üretmesini sağlayabilirsiniz. Bu özellik, denetleyicileri veya UserControl kullanan görünümleri oluşturan eylemleri süslemek için kullanılabilir.

Tüm bunların içinde, UserControl verilerinin çalıştırılmakta olan eylemden bağımsız olduğunu varsayıyorum. Bir bağımlılık varsa, mantığı muhtemelen bir stratejiye (ya da belki Stratejiyi kullanarak sınıflara) itmek ve her eylemde ya da denetleyicide (OnActionExecuting'i geçersiz kılarak) verilerin açık bir şekilde üretilmesini sağlamak en iyisidir.

-1

Model sınıflarınızı bir hiyerarşiye koymayı da düşünebilirsiniz. Üst sınıf (veya üst sınıflardan biri), yaygın kullanıcı denetimleriniz için gerekli verileri içerir. Daha sonra bu yaygın olarak kullanılan verileri bir temel kontrolör sınıfına yükleyebilirsiniz.

4

Alternatif olarak, ASP.NET MVC 2 ile artık verileri alabilen tamamen yeni bir denetleyici eylemini çağırmak için RenderAction'ı kullanabilirsiniz. Bu, kodunuzu daha modüler hale getirir ve verilerin nereden geldiği daha nettir.

+0

Oooo sadece ihtiyacım olan şey gibi geliyor! – Alex