MVC4.0中ViewBag、ViewData、TempData和ViewModel几种传值方式的区别

 MVC框架实现了数据的分离,使页面看起来更加的简洁,MVC4.0中Controller和View的数据传输有上边这几种方式,今天我们来探讨下这几种方式的却别。

一:ViewBag和ViewData

 

ViewBag和ViewData 其实是互通的,他们的区别是 ViewBag不再是键值对的存储形式,而是dynamic动态类型的,他会在程序运行的过程中被解析。

  实例

  ViewBag本质上是ViewData,只不过是多了层dynamic控制,所以ViewBag和ViewData只针对当前Action有效,和View的生命周期相同。

二:TempData

  TempData保存的数据是存储在Session中,Controller每次请求时都是从Session中取到TempData(),然后清除Session,获取完TempData的数据,虽然保存的内部字典中,但字典中的每个条目在访问一次后就从Controller中删除,所以TempData最多经过一次Controller传递,并且每个元素最多只能被访问一次然后就会呗自动删除。

  注意:这里的一次访问是指从一个请求到下一个请求,因为在下一个请求到来之后,会从Session中取出保存在里面的TempData数据并赋值给TempData,然后将数据从Session中删除

三:ViewModel

  ViewModel是我们使用最多的数据传输方式了,他能够实现智能提示,

@model PagedList<GM360_REWARD_Model.ViewModels.Reward_Sale_Bad>

  调用方式如上,而在Controller中存放数据

  

 PagedList<Reward_Sale_Bad> pageList = CalReward(pageListTemp); //CalReward() 查询并计算数据的方法
 return View(pageList);

  

原文地址:https://www.cnblogs.com/blogsaspx/p/10781704.html

时间: 2024-10-11 04:07:25

MVC4.0中ViewBag、ViewData、TempData和ViewModel几种传值方式的区别的相关文章

MVC4.0中下来列表框的,两种使用方法DropDownList

后台控制器代码 public ActionResult Drop() { var list = new List<SchoolInfo>(); list.Add(new SchoolInfo() { SchoolID = 1, SName = "北京大学" }); list.Add(new SchoolInfo() { SchoolID = 2, SName = "上海大学" }); var model = new UserViewInfo(); mod

html5 中的 css样式单 的 两种调用方式的区别

在 html5 中 使用 css 样式单的方式 有4种: 1.链接外部样式文件:将样式文件 彻底与 html 文档分离,样式文件需要额外引入,这种情况下 一批样式 可以控制多份文档.对于好多文件都共有的样式单,推荐使用这种方式. 2.导入外部样式文件:此方式与第一种方式类似,但是需要用@import来引入外部样式单.由于某些浏览器(如 internet explorer)会在导入外部样式单时导致闪屏,所以不推荐用这种方式,而是尽量考虑使用第一种方式. 3.使用内部样式定义:这种方式是通过在htm

在mvc4.0中使用json数据

今天接触了mvc4.0项目,View中需要获取从Control传来的json数据.过程记录如下: 在 MVC 返回的ActionResult中,为我们提供了JSONResult(继承至ActionResult)对象,我们可以直接用他来返回JSON对象给View处理 将自定义的Model 实例传给Json方法,它会自动根据我们Model 的属性,遍历属性后生成JSON对象,返回View.然后就可以在前端使用JQ对JSON数据进行处理了 Control中的代码: public JsonResult

MVC4.0中项目发布遇到IE11时session存入URL中,导致记不住密码的问题

///MVC4.0中项目发布遇到IE11时session存入URL中,导致记不住密码的问题,在webconfig中配置<system.web><authentication mode="Forms">      <forms loginUrl="~/Account/Login" timeout="2880" cookieless="UseCookies" />    </authent

NEt中MVC的View和Controller的几种传值方式

1: ViewData传值方式ViewData的生命周期和View相同, 只对当前View有效.   ViewData["zd"] = dfdfd2:TempData传值方式   可以跨Action传递   TempData的数据至多只能经过一次Controller传递, 并且每个元素至多只能被访问一次,     例如一个用法为,抛出一个异常.跳转到error页面public ActionResult Index3(){      TempData["tempIndex&qu

Java中String的两种赋值方式的区别

本文修改于:https://www.zhihu.com/question/29884421/answer/113785601 前言:在java中,String有两种赋值方式,第一种是通过"字面量"赋值,如:String str="hello",第二种是通过new关键字创建新对象,如:String str=new String("hello").那么这两种赋值的方式到底有什么区别呢,下面给出具体分析. 1.首先回顾Java虚拟机的结构图. 在上面的

C++中三种继承方式的区别

本文来自https://zhidao.baidu.com/question/159111767.html  详细说明了三种继承方式的区别,好文 还可参考另一篇文章: https://blog.csdn.net/one_super_dreamer/article/details/81611118 https://blog.csdn.net/u011857683/article/details/82120998 public公有继承 protected保护继承 private私有继承 我们知道类的p

spring Boot构建的Web应用中,基于MySQL数据库的几种数据库连接方式进行介绍

包括JDBC.JPA.MyBatis.多数据源和事务. 一.JDBC 连接数据库 1.属性配置文件(application.properties) spring.datasource.url=jdbc:mysql://localhost:3306/test spring.datasource.username=root spring.datasource.password=123456 spring.datasource.driver-class-name=com.mysql.jdbc.Driv

SVN 中两种Revert方式的区别

SVN中,当我们需要revert之前的commit的时候,有两个选项: 1. Revert to this revision 2. Revert changes from this revision 下面说一下两种方式的区别: 假设我们有四个连续的commit : 1, 2, 3, 4 对于commit 2 选择Revert to this revision,那么,只有1,2的改变被保留,3, 4的改变会被取消. 选择 Revert changes from this revision,那么,1