2009-02-25 16 views
4

Şu anda ASP.NET MVC'yi öğreniyorum, eğer sorulmuşsa veya oldukça basit görünüyorsa, lütfen soruyu affedin, ama eğer biraz yardım alabilirsem büyük bir memnuniyetle karşılarım.ASP.NET MVC - Görüntülemeye iki havuzun döndürülmesi

İki farklı depoyu Görüntülemeye geri döndürmeye çalışıyorum. ASP.NET MVC'nin eğitimlerini araştırıyorum ve bir adım daha ileriye götürmeyi deneyeceğim. Film tablosundaki Filmler tablosundaki filmleri iyi görüntüleyebilirim ancak aynı zamanda Aktörler tablosundaki verileri de görüntülemek istiyorum ve bunu nasıl yapacağımı bilmiyorum. Filmleri görüntülemek için Depozit modelini takip ediyordum.

Umarım bu mantıklıdır.

sayesinde Görünüm birden çok veri setleri geçmek benim app ne yapıyorum

+0

Teknik olarak, bu bir kopyasıdır. http://stackoverflow.com/questions/514144/is-it-possible-to-send-more-than-one-model-object-to-an-asp-net-mvc-view/514198#514198 –

+0

Özür dilerim baktı ama bu yazıyı bulamadım. Başların için teşekkürler. –

+0

Yanıt veren herkese teşekkürler. Tüm fikirlerini not ettim. –

cevap

10

İçinde Filmler ve Actors bir listesi sahiptir yeni bir sınıf oluşturun: denetleyicisi eylem,

public class MoviesAndActorsModel 
{ 
    public IList<Movie> Movies { get; set; } 
    public IList<Actor> Actors { get; set; } 
} 

Ardından yapmak Şimdi

public ActionResult List() 
{ 
    MoviesAndActorsModel model = new MoviesAndActorsModel(); 

    model.Movies = _repository.GetMovies(); 
    model.Actors = _repository.GetActors(); 

    return View(model); 
} 

: En deposundan doldurulur tipi MoviesAndActorsModel bir nesne örneğini emin görünüm ViewPage <MoviesAndActorsModel> devralır ve bunu gibi film ve aktörleri hem erişmek mümkün olmalıdır:

<% foreach (Movie movie in Model.Movies) { %> 
    <%= movie.Title %> 
<% } %> 

<% foreach (Actor actor in Model.Actors) { %> 
    <%= actor.Name %> 
<% } %> 
+1

Bu yaklaşımı öneriyorum ancak Model ile değil, ViewData ile yeni sınıfı ekleyebilirim. –

+0

Katılıyorum, bu yaklaşım olumluysa. –

+0

Bu daha iyi, henüz benim için henüz değiştirmedim, ama bu bana gerçekten ihtiyaç duymadığım bir rutini tamamen ortadan kaldıran bir refactoring yapmamı sağladı. Ayrıca, ASP.NET web sitesi yakın zamanda bir dizi yeni eğitici ekledi: http://www.asp.net/learn/mvc/ –

2
ViewData["Movies"] = //Function to get Movies; 
ViewData["Actors"] = //Function to get Actors; 

return View(); 

.

DÜZENLEME: Eğer tablolarda kurmak tuşları Yutulan yabancı varsayarak aynı şeyi başarmak olacaktır

var movies = /*Function to get Movies*/ as Movies; 
movies.Actors.Load(); 

: Eğer veritabanında kurmak ilişkileri varsa böyle bir şey yapabileceğini

Veya, .

Ve sonra görünümünde yapardın:

<% 
    var movies = ViewData["Movies"] as Movies; 
    var actors = ViewData["Actors"] as Actors; 
%> 
+4

ViewData özelliklerine erişmek için kodlanmış dizelerden kaçınmaya çalışırdım. ViewData'da depolayacaksanız, özel bir model sınıfı oluşturun, bu yüzden güçlü yazılmıştır. –

+0

Bu aslında çok daha iyi görünüyor (Emin değilim, ama neden), her iki yolun benimki kırık ya da herhangi bir şey olarak çalışmadığı varsayılmaktadır. Aynı problemi yaşıyordum ve Scott Guthrie'nin blog'unda gördüğüm örnek uygulama için bunu nasıl yapıyor olduğunu gördüm. Yine de senin yolunu beğendim. –

0

biraz farklı bir sorun için dhulk ​​çözümünü uygun bir varyasyonunu gösteren bir tutorial on http://asp.net/mvc, vardır: nasıl bazı dönmek için her bir görünüm tarafından kullanılan ortak veriler (ör. çok sayıda kod içermeyen her işlem yönteminden

Eğitici, ortak/paylaşımlı verileri görünüme geri döndürmeyi sağlayan sözde bir uygulama denetleyicisi (yalnızca tüm denetleyiciler için temel bir sınıf) sunar.