2009-02-25 7 views
4

Ich lerne gerade ASP.NET MVC, also bitte entschuldigen Sie meine Frage, wenn es gefragt wurde oder scheint eher einfach, aber wenn ich etwas Hilfe bekommen könnte, würde ich es sehr schätzen.ASP.NET MVC - Rückgabe von zwei Repositories zur Ansicht

Ich versuche, zwei verschiedene Repositorys zur Ansicht zurückzugeben. Ich gehe durch ASP.NET MVC Tutorials und ich dachte, ich würde versuchen, es einen Schritt weiter zu gehen. Ich kann Filme von der Filmtabelle in der Datenbank gerade gut anzeigen, aber ich möchte auch Daten von der Schauspielertabelle auf dem gleichen gut auch anzeigen und ich bin nicht sicher, wie man das macht. Zum Anzeigen der Filme folgte ich dem Repository-Muster.

Ich hoffe, das macht Sinn.

Danke,

+0

Technisch ist dies ein Duplikat. http://stackoverflow.com/questions/514144/is-it-possible-to-send-more-than-one-model-object-to-an-asp-net-mvc-view/514198#514198 –

+0

Sorry ich schaute, aber ich konnte diesen Beitrag nicht finden. Danke für die Köpfe hoch. –

+0

Danke an alle, die geantwortet haben. Ich habe alle deine Ideen notiert. –

Antwort

10

eine neue Klasse erstellen, die sowohl eine Liste der Filme und Schauspieler in sich hat:

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

Dann in Ihrem Controller-Aktion, ein Objekt vom Typ MoviesAndActorsModel instanziiert, die von Ihrem Repository bevölkert ist:

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

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

    return View(model); 
} 

Jetzt machen sicher, dass Ihre Ansicht von Viewpage erbt <MoviesAndActorsModel> und Sie sollten sowohl die Filme und Schauspieler wie so zugreifen können:

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

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

Ich empfehle diesen Ansatz, aber ich würde die neue Klasse mit ViewData und nicht Model suffix. –

+0

Ich stimme zu, dieser Ansatz ist günstig. –

+0

Das ist besser, ich habe meins noch nicht geändert, um das zu tun, aber es hat mich dazu gebracht, ein Refactoring durchzuführen, das bisher eine ganze Routine eliminiert hat, die ich nicht wirklich brauchte. Außerdem hat die ASP.NET-Website kürzlich eine Reihe neuer Tutorials hinzugefügt: http://www.asp.net/learn/mvc/ –

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

return View(); 

Das ist, was in meiner app, um mehrere Sätze von Daten an die Ansicht übergeben ich tue.

EDIT:

Oder, wenn Sie Beziehungen aufgebaut in Ihrer Datenbank haben Sie so etwas wie tun könnte:

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

, dass das Gleiche erreichen, wird vorausgesetzt, Sie Schlüssel einrichten in Ihren Tabellen foriegn haben .

Und dann Ihrer Ansicht nach würden Sie tun:

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

Ich würde versuchen, hardcodierte Zeichenfolgen zu vermeiden, um auf ViewData-Eigenschaften zuzugreifen. Wenn Sie es in ViewData speichern möchten, erstellen Sie eine benutzerdefinierte Modellklasse, damit sie stark typisiert wird. –

+0

Das scheint tatsächlich viel besser zu sein (ich bin mir nicht sicher, warum, aber es tut), ich nehme an, dass jeder Weg funktionieren würde, weil meiner nicht kaputt ist oder so. Ich hatte das selbe Problem und ich sah auf Scott Guthries Blog, dass er so für die Beispiel-App arbeitete, die er hatte. Ich mag dich aber besser. –

0

Es gibt eine tutorial on http://asp.net/mvc, die eine Variation der dhulk-Lösung für ein etwas anderes Problem zeigt: wie einige zurückzukehren gemeinsame Daten, die von jeder Ansicht verwendet werden (z. B. auf der Masterseite) von jeder Aktionsmethode, ohne viel doppelten Code zu haben.

Das Lernprogramm enthält einen so genannten Anwendungscontroller (einfach eine Basisklasse für alle Controller), der die gemeinsamen/freigegebenen Daten an die Ansicht zurückgibt.

Verwandte Themen