2016-09-30 73 views
1

我有一个StartController,其中包含一个存储库中的电影列表。我想使用该列表,不仅在StartController中,而且在我的GenreController中,但我无法弄清楚。 这是我StartController:继承,存储库,MVC

namespace IMDB 
{ 
    public class StartController : Controller 
    { 
     // GET: Start 
     public ActionResult Index() 
     { 

      var movies = GetMoviesFromRepository(); 

      return View(movies); 
     } 
     // GET: Details 

     public ActionResult Movie(int id) 
     { 
      var allMovies = GetMoviesFromRepository(); 
      var movie = allMovies.FirstOrDefault(x => x.MovieID.Equals(id)); 

      return View(movie); 
     } 

     private List<Movie> GetMoviesFromRepository() 
     { 

      var movies = new List<Movie>(); 

      var movie1 = new Movie(); 
      movie1.MovieID = 1; 
      movie1.Title = "Terminator"; 
      movie1.Genre = "Comedy"; 
      movie1.Year = 1984; 
      movie1.Country = "America"; 
      movie1.Picture = "http://vignette4.wikia.nocookie.net/tvdatabase/images/8/89/Terminator_(1984).jpg"; 
      movies.Add(movie1); 

      var movie2 = new Movie(); 
      movie2.MovieID = 2; 
      movie2.Title = "Terminator 2: Judgement Day"; 
      movie2.Genre = "Romantic"; 
      movie2.Year = 1991; 
      movie2.Country = "America"; 
      movie2.Picture = "https://upload.wikimedia.org/wikipedia/en/8/85/Terminator2poster.jpg"; 
      movies.Add(movie2); 

      return movies; 
     } 
    } 
}  

这是GenreController,我想从StartController访问列表:

namespace IMDB.Controllers 
{ 
    public class GenreController : Controller 
    { 
     // GET: Genre 
     public ActionResult Genre(string genre) 
     { 
      var allGenres = GetMoviesFromRepository(); 
      // Some code goes here 

      return View(); 
     } 
    } 
} 

显然,这是行不通的。但我无法弄清楚如何让我的列表在GenreController中工作。

+1

最好的方法是使'GetMoviesFromRepository'单独使用,并从两个控制器使用它,这是更有意义! –

+0

好吧,我明白了。我怎么会这样做呢?我如何从两个控制器使用它? (全部在此处newb) – Koalemos

+1

嘿,对不起,但是正忙着运行,你可以添加新的类库并在那里添加你的类,并且在这个类中添加你的'GetMoviesFromRepository'。 –

回答

2

这就是事业部都在谈论:

提取电影资料库逻辑移出控制器,进入自己的类。它的目的是检索你的电影。

public class MovieRepository { 
     public List<Movie> GetMoviesFromRepository() 
     { 
      var movies = new List<Movie>(); 

      var movie1 = new Movie(); 
      movie1.MovieID = 1; 
      movie1.Title = "Terminator"; 
      movie1.Genre = "Comedy"; 
      movie1.Year = 1984; 
      movie1.Country = "America"; 
      movie1.Picture = "http://vignette4.wikia.nocookie.net/tvdatabase/images/8/89/Terminator_(1984).jpg"; 
      movies.Add(movie1); 

      var movie2 = new Movie(); 
      movie2.MovieID = 2; 
      movie2.Title = "Terminator 2: Judgement Day"; 
      movie2.Genre = "Romantic"; 
      movie2.Year = 1991; 
      movie2.Country = "America"; 
      movie2.Picture = "https://upload.wikimedia.org/wikipedia/en/8/85/Terminator2poster.jpg"; 
      movies.Add(movie2); 

      return movies; 
     } 
    } 

然后在您的控制器中,添加一个构造函数,该构造函数初始化一个将保存MovieRepository的私有变量。然后,只要调用movieRepository.GetMoviesFromRepository(),就可以在任何想要检索电影收藏的地方使用。

 public class StartController : Controller { 
      private readonly MovieRepository movieRepository; 

      public StartController() 
      { 
       this.movieRepository = new MovieRepository(); 
      } 

      // GET: Start 
      public ActionResult Index() 
      { 
       var movies = movieRepository.GetMoviesFromRepository(); 

       return View(movies); 
      } 
      // GET: Details 

      public ActionResult Movie(int id) 
      { 
       var allMovies = movieRepository.GetMoviesFromRepository(); 
       var movie = allMovies.FirstOrDefault(x => x.MovieID.Equals(id)); 

       return View(movie); 
      } 

     } 
+2

是的,确切地说。谢谢@Daryl,我很忙。 –

+0

非常整齐,非常感谢。你们俩 – Koalemos