How to make single view using viewmodel in asp.net mvc 4?



我有不同的模型Image,Page&页面类别

public class Image
    {
        public int ImageId { get; set; }
        public string ImageTitle { get; set; }
        public string ImageURL { get; set; }
    }

public class Page
    {
        public int PageId { get; set; }
        public string PageTitle { get; set; }
        public string Content { get; set; }
        public int PageCategoryId { get; set; }
        public virtual PageCategory PageCategory { get; set; }
    }

public class PageCategory
    {
        public int PageCategoryId { get; set; }
        public string CategoryName { get; set; 
        public virtual ICollection<Page> Pages { get; set; }
    }

DBContext类是

 class DemoContext:DbContext
    {
        public DbSet<PageCategory> PageCategories { get; set; }
        public DbSet<Page> Pages { get; set; }
        public DbSet<Image> Images { get; set; }
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
        }

    }

我想知道如何使用ViewModel将所有模型数据获取到主页。

例如:如何从多个模型中获取主页中的图像列表和页面列表?

您可能想要这样的东西:

视图模型:

    //Create a viewModel with all the properties that you need
    public class ViewModel
        {
            public int ImageId { get; set; }
            public string ImageTitle { get; set; }
            public string ImageURL { get; set; }
            public int PageId { get; set; }
            public string PageTitle { get; set; }
            public string Content { get; set; }
            public int PageCategoryId { get; set; }
            public string CategoryName { get; set; }
        }

控制器:…

using (DemoContext db = new DemoContext()){

 List<ImagePageViewModel> viewData = (from p in db.Page
 join pc from db.PageCategory on p.PageCategoryId equals pc.PageCategoryId 
 select new ViewModel(){
 PageTitle=p.PageTitle,
 CategoryName = pc.CategoryName
 //... set every property you want
})
}
return View(viewData );

注意:我没有将Image添加到查询中,因为没有显式关系在Image和其他表之间,所以我让你做。

创建另一个类,并将以上三个定义到其中

public class MyView
{
    public List<Image> Images { get; set; }
    public List<Page> Pages { get; set; }
    public List<PageCategory> PageCategories { get; set; }
}

控制器操作:-

public ActionResult Index()
{
    MyView myView = // Get it using your logic
    return View(myView);
}

终于得到了我的答案:

公共类ViewModelDemo{

    public IEnumerable<Image> images { get; set; }
    public IEnumerable<Pages> pages { get; set; }
    public IEnumerable<PageCategory> pagecategories { get; set; }
}

然后在家庭控制器

    private DemoContext db=new DemoContext();
    public ActionResult Index()
    {
    ViewModelDemo vm = new ViewModelDemo();
    vm.images = db.Images.ToList();
    vm.pages=db.Pagess.ToList();
    vm.pagecategories=db.PageCategories.ToList();
    return View(vm);
    }

最新更新