ASP.NET MVC - 将两个存储库返回到View

时间:2009-02-25 21:01:56

标签: asp.net-mvc

我目前正在学习ASP.NET MVC,所以请原谅我的问题,如果它被问到或者看起来相当简单,但如果我能得到一些帮助,我会非常感激。

我正在尝试将两个不同的存储库返回到View。我正在阅读ASP.NET MVC的教程,我想我会尝试更进一步。我可以在数据库中的电影表中显示电影,但我也希望同样显示Actors表中的数据,我不知道如何去做。为了显示我遵循存储库模式的电影。

我希望这是有道理的。

谢谢,

3 个答案:

答案 0 :(得分:10)

创建一个同时包含电影和演员列表的新类:

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

然后,在您的控制器操作中,实例化从您的存储库填充的MoviesAndActorsModel类型的对象:

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

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

    return View(model);
}

现在确保您的视图继承自ViewPage <MoviesAndActorsModel>,您应该能够同时访问电影和演员:

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

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

答案 1 :(得分:2)

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

return View();

这就是我在我的应用中所做的将多组数据传递给View。

编辑:

或者,如果您在数据库中设置了关系,则可以执行以下操作:

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

假设您在表中设置了foriegn键,那将完成同样的事情。

然后在你看来你会这样做:

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

答案 2 :(得分:0)

有一个tutorial on http://asp.net/mvc,它演示了dhulk针对稍微不同的问题的解决方案的变体:如何从每个操作方法返回每个视图(例如,通过母版页)使用的一些公共数据而没有很多重复的代码。

本教程介绍了一个所谓的应用程序控制器(只是所有控制器的基类),它处理将公共/共享数据返回到视图。