ViewModel对MVC 5 2模型,db,controller视图关系的理解

时间:2017-04-06 13:16:49

标签: c# asp.net-mvc

我一直试图了解整个概念,我真的可以帮助你。我正在使用代码优先方法。我昨天发了一个帖子here但是基于建议的进一步工作对我没有用。所以为了使问题清楚,我再次讨论它。

我有2个简单的课程。

 public class Media
    {
        public int Id { get; set; }
        public string title { get; set; } 
        public string description { get; set; }
        public string body { get; set; }
        public string ImagePath { get; set; }        
    }

public class Video
{
    public int ID { get; set; }
    public string Title { get; set; }
    public string Description { get; set; }
    public string VideoLink { get; set; }
    public string tags { get; set; }
}

对于他们每个人,我有自己的控制器和由EF生成的一组CRUD视图。所以我可以在db中创建和存储这两个对象,我有一个上下文类:

public class EventsContext : DbContext
    {
        public DbSet<Media> Medias { get; set; }
        public DbSet<Video> Videos { get; set; }
        }   
    }

我有这个方法im MediasController

public ActionResult MediaMain()
{
    IEnumerable<Media> medias = db.Medias;
    ViewBag.Medias = medias;
    return View();
}

它从db访问存储对象,并允许处理视图中的每个字段。这样。

@foreach (var b in ViewBag.Model)
{ 
   @Html.Raw(Model.ImagePath)
}

良好而健全,我理解。但。我仍然有两种不同的观点,而我只需要一种观点。所以我创建了一个MediaViewModel类(感谢您的帮助),如下所示:

public class MediaViewModel
{
    public Media media { get; set; }
    public Video video { get; set; }
}

如果我在MediasController中创建一个方法,如下所示:

public ActionResult MediaMain () {
    var model = new MediaViewModel();
    return View(model);
}

我无法访问来自对象的数据,因为它给我带来了无效感,看起来我不会发送一个对象。我想我需要像IEnumerable<MediaViewModel> medias = db.MediaViewModel;这样的东西,但我在我的数据库上下文中没有这个,我需要创建一个吗?如果是这样,它将是两个类的对象的集合?这听起来不对。我需要看看Controller中究竟发生了什么,以便能够访问我需要的所有数据。请帮助。

1 个答案:

答案 0 :(得分:1)

你的模特

public class MediaViewModel
{
    public List<Media> media { get; set; }
    public List<Video> video { get; set; }
}

您的控制器方法:

public ActionResult MediaMain () {
    var model = new MediaViewModel();
    model.media = db.Medias.ToList();
    model.video = db.Videos.Tolist();
    return View(model);
}

希望它有所帮助。