我一直试图了解整个概念,我真的可以帮助你。我正在使用代码优先方法。我昨天发了一个帖子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中究竟发生了什么,以便能够访问我需要的所有数据。请帮助。
答案 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);
}
希望它有所帮助。