ViewModel在MVC3中的应用:一个view显示多个model

在mvc3中,默认是一张数据表对应一个model,一个视图 view只显示一个model。

但是有些时候,我们一个视图上可能需要显示多个model的内容,即一个网页可能要展示多张表的信息,那怎么办呢,这时候,ViewModel就能派上用途了。

ViewModel,顾名思义,专为view服务的model,专门为view视图准备的model。

我这里假设有两个张数据表,Article表和Information表,都需要在首页上显示出来,看看下面的步骤:

一、先写出两张表各自对应的model和相应的DbContext文件,这一步比较简单,我就省略了。

二、创建一个类(ViewModel),取名为indexData

 public class IndexData
    {
        public IEnumerable<Information> Information { get; set; }
        public IEnumerable<Article> Article { get; set; }
        public IndexData()
        {
            Entities db = new Entities();
            this.Information = db.Information.ToList();
            this.Article = db.Article.ToList();
        }
    }

三、控制器Controller

    public ActionResult Index()
        {
            IndexData ind = new IndexData();
            return View(ind);
        }

四、view视图

@model IndexData<div>
   <ul>
   @foreach (var item in Model.Information.Take(8))
   {
      <li>@Html.DisplayFor(m => item.InfoTitle)</li>
   }
    </ul> </div>
<div>
   <ul>
    @foreach (var item in Model.Article.Take(8))
     {         <li>@Html.DisplayFor(m => item.ArticleTitle)</li>
      }
   </ul>
</div>

如果Article表又想分成两部分来显示,则可以这样:

@model IndexData<div>
   <ul>
   @foreach (var item in Model.Article.Where(c=>c.type=="news").Take(8))
   {
      <li>@Html.DisplayFor(m => item.InfoTitle)</li>
   }
    </ul>
</div>
<div>
   <ul>
   @foreach (var item in Model.Article.Where(c=>c.type=="story").Take(8))
   {
      <li>@Html.DisplayFor(m => item.InfoTitle)</li>
   }
    </ul>
</div>
 

我这里的ViewModel里面只涉及到了两张表,实际上更多张表也是一样的。有些门户网站的首页,可能需要显示十几个model,做法完全是一样的。

时间: 2024-10-25 12:30:32

ViewModel在MVC3中的应用:一个view显示多个model的相关文章

mvc 一个View显示多个Model

今天做到这个,记录一下. 解决的办法是.定义一个class:viewModel.把要显示的model放进去. Controller: using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using MvcService.Models; namespace MvcService.Controllers { public class vie

一个View显示多个Model

ZhuYecontrollers代码 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using QunZhongLuXian.Models;//项目名称,引用自定义的Model namespace QunZhongLuXian.Controllers {     public class viewModel     {      

Android扩展-怎么在Activity中拿到一个View的宽和高

今天来简单的介绍一下怎么在Activity中拿到View的width和height.有人可能会疑问,这个有什么难的,我们直接可以在Activity生命周期函数里面获取width和height.看似简单,实际上在onCreate.onStart.onResume中均无法获取正确的width和height,这是因为View的measure过程和Activity的生命周期方法不是同步的,因此无法保证Activity执行了onCreate.onStart.onResume时,某个View已经测量完毕,如

源码解析:dialog, popupwindow, 和activity 的第一个view是怎么来的?

问题 在慢慢熟悉android 的过程中,发现一个view 或者layout的初始化,或者构造的流程还是比较清楚的,也就是加到父控件中,然后就开始了对应的生命周期.但是整个界面的父控件,或者说系统的第一个view, 是怎么来的,如何初始化和绘制的呢? 概述 概述:带着困扰我的问题,在前文的基础上,继续分析应用界面和framework的关系,通过分析viewrootimpl 的来源,并结合dialog, popupwindow, 和activity 的 根view的创建流程,回答了问题界面的根vi

ASP.NET MVC3中Controller与View之间的数据传递总结

</pre>在ASP.NET MVC<span style="font-family:宋体">中,经常会在</span>Controller<span style="font-family:宋体">与</span>View<span style="font-family:宋体">之间传递数据,因此,熟练.灵活的掌握这两层之间的数据传递方法就非常重要.本文从两个方面进行探讨:&

ASP.NET MVC3中Controller与View之间的数据传递

在ASP.NET MVC中,经常会在Controller与View之间传递数据,因此,熟练.灵活的掌握这两层之间的数据传递方法就非常重要.本文从两个方面进行探讨: 一.  Controller向View传递数据 1.       使用ViewData传递数据 我们在Controller中定义如下: [csharp] view plain copy print? ViewData["Message_ViewData"] = " Hello ViewData!"; Vi

(转载)数据库存取图片并在MVC3中显示在View中

简介:在有些情况下需要将图片转换为二进制流存放在数据库中,当显示时再从数据库中读出来显示在界面上. 本文简单介绍数据库中图片的存取方法,并在MVC3中显示在Razor视图中.仅供初学者参考学习. 1. 将图片转换为二进制流 /// <summary> /// convert a picture file to byte array /// </summary> public byte[] GetBytesFromImage(string filename) { FileStream

在VS2010中如何删除一个类(使之在Class View中不再出现)?

在 解决方案管资源管理器 中分别选择要删除的类的.h和.cpp文件,然后右键选择"移除",会弹出移除 删除 取消 三个选项,选择"移除",只是将类的文件从工程中删除,但文件还在工程的目录下保存着,选择"删除",就将文件从硬盘上删掉了 在VS2010中如何删除一个类(使之在Class View中不再出现)?,布布扣,bubuko.com

Android中如何优雅地自定义一个View

Android中自定义View的实现比较简单,无非就是继承父类,然后重载方法,即便如此,在实际编码中难免会遇到一些坑,我把自己遇到的一些问题和解决方法总结一下,希望对广大码友们有所帮助. 注意点① 用xml定义Layout时,Root element 最好使用merge 当我们需要继承一个布局比较复杂的ViewGroup(比较多的是LinearLayout.RelativeLayout)时,通常会用xml来写布局,然后在自定义的View类中inflate这个定义了layout的xml文件. 首先