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,做法完全是一样的。
ViewModel在MVC3中的应用:一个view显示多个model的更多相关文章
- MVC:一个View显示多个Model(多个Model你可以使用ViewBag或ViewData , 或者:Model["myInfo"] as)
MVC:一个View显示多个Model 多个Model你可以使用ViewBag或ViewData , 或者:Model["myInfo"] as. 比如: Tuple<str ...
- 在Android中动画移动一个View的位置,采用Scroller类实现Android动画之 View移动
在Android中动画移动一个View的位置,采用Scroller类实现 今天说最近自己遇到的一个问题,就是要用动画效果来移动一个VIew的位置. 这个具体的情况是,需要做一个SlidingMenu的 ...
- ViewModel在MVC3中的应用:实现多字段表格的部分更新
假设我们有这样一张用户表: public class F_users { [Key] [Display(Name="用户名:")] [Required(ErrorMessage=& ...
- 订单业务楼层化 view管理器和model管理器进行了model和view的全面封装处理 三端不得不在每个业务入口上线时约定好降级开关,于是代码中充满了各种各样的降级开关字段
京东APP订单业务楼层化技术实践解密 原创 杜丹 留成 博侃 京东零售技术 2020-09-29 https://mp.weixin.qq.com/s/2oExMjh70Kyveiwh8wOBVA 用 ...
- ASP.NET MVC3中Controller与View之间的数据传递总结
一. Controller向View传递数据 1. 使用ViewData传递数据 我们在Controller中定义如下: ViewData["Message_ViewData& ...
- ASP.NET MVC3中Controller与View之间的数据传递
在ASP.NET MVC中,经常会在Controller与View之间传递数据,因此,熟练.灵活的掌握这两层之间的数据传递方法就非常重要.本文从两个方面进行探讨: 一. Controller向Vie ...
- IOS中封装一个View的思路
一.封装一个View的思路 1.将View内部的业务逻辑(显示内容)封装到View中 2.一般情况下,View的位置应该由父控件来决定,也就是位置不应该固定死在View内部 3.至于View的宽高,根 ...
- 从一个子视图或者一个View中刷新其他UITableView
被问到了一个问题:如何从一个子视图或者一个View中刷新其他UITableView,常规的写法可能是这样的 TestTVC*testTVC =[[TestTVC alloc] init];[testT ...
- Umbraco -- 在Visual Studio中新建一个View 如何在Umbraco back office 中显示出来
在使用Umbraco中的过程中,遇到一个问题. 我在项目中(Visual Studio),添加了一个View---Test.cshtml. 然后进入到该Umbraco项目的back office, 在 ...
随机推荐
- mysql binlog恢复
MySQL Binary Log也就是常说的bin-log, ,是mysql执行改动产生的二进制日志文件,其主要作用有两个: * 数据回复 * 主从数据库.用于slave端执行增删改,保持与maste ...
- Scala Tail Recursion (尾递归)
Scala对尾递归进行了优化,甚至提供了专门的标注告诉编译器需要进行尾递归优化.不过这种优化仅限于严格的尾递归,间接递归等情况,不会被优化. 尾递归的概念 递归,大家都不陌生,一个函数直接或间接的调用 ...
- javaScript没有块级作用域
1.如下,变量i,j,k 的作用域是相同的. function test(obj){ var i= 0; if(typeof obj == "object"){ var j = 0 ...
- 【Android开发学习笔记】【第二课】Activity学习
什么是Activity,就是我们所看到的 需要理解以下四句话: 1.一个Activity就是一个类,并且这个类需要集成Activity: 2.需要重写OnCreat方法 3.每个Activity都需要 ...
- 20145211 《Java程序设计》实验报告五————Java网络编程及安全实验报告
实验内容 1.掌握Socket程序的编写: 掌握密码技术的使用: 设计安全传输系统. 实验步骤 这一部分是与我的partner合作的,详见他的博客- [20145326 <Java程序设计> ...
- [LeetCode]题解(python):102 Binary Tree Level Order Traversal
题目来源 https://leetcode.com/problems/binary-tree-level-order-traversal/ Given a binary tree, return th ...
- vb 修改数据库
Dim rscode As New ADODB.Recordset ................... Set RsCode = zwpub.DataMdb.DbConnect.Execute(& ...
- asp.net操作xml
下面是xml文档内容: <content width="368" height="450" bgcolor="cccccc" load ...
- Flash的坑之ExternalInterface.call只返回null值的解决办法
flash坑太多了,要确保能有效的使用ExternalInterface.call调用js的话,需要两个条件: 1.allowScriptAccess="always" 2.id= ...
- 二级c程序设计题(1)
原文:http://www.cnblogs.com/imaker/p/6120951.html 所属年份:2010.9;2011.3;2012.3;请编写函数fun,其功能是:找出2×M整型二维数组中 ...