【问题标题】:How to make single view using viewmodel in asp.net mvc 4?如何在 asp.net mvc 4 中使用 viewmodel 制作单个视图?
【发布时间】:2015-03-30 04:51:02
【问题描述】:

我有不同的模型图像、页面和页面类别

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 将所有模型数据获取到主页。

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

【问题讨论】:

  • 创建一个包含属性IEnumerable&lt;Image&gt;IEnumerable&lt;Page&gt;的视图模型,将其填充到控制器中并将其传递给视图。
  • @StephenMuecke 如何在视图模型中的 IEnumerable 之后填充控制器中的数据?

标签: asp.net asp.net-mvc-4 viewmodel


【解决方案1】:

你可能想要这样的东西:

视图模型:

    //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 和 others 表之间,所以我让你做。

【讨论】:

    【解决方案2】:

    创建另一个类并将以上三个定义到其中。如下所示

    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);
    }
    

    【讨论】:

      【解决方案3】:

      终于得到了我的答案:

      公共类 ViewModelDemo {

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

      然后在 HomeController 中

          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);
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-08-01
        • 2014-07-12
        • 2015-08-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-17
        相关资源
        最近更新 更多