前言

本系列开始着手讲述ASP.NET MVC,也算是自己对基础的回顾以及进一步深入学习,保证每天发表一篇该系列文章,关于基本知识则不再叙述,园子有关文章不胜枚举,这一系列若有叙述不当或错误之处,欢迎指出以及批评。

前奏

新建基本项目在Models文件夹下定义如下类:

  1. public class Person
  2. {
  3. public int Id { get; set; }
  4.  
  5. public string Name { get; set; }
  6.  
  7. public string BlogAddress { get; set; }
  8.  
  9. public string Description { get; set; }
  10. }

我们在控制器的Action方法中实例化此类:

  1. var p = new Person()
  2. {
  3. Id = 98,
  4. Name = "xpy0928",
  5. BlogAddress = "http://www.cnblogs.com/CreateMyself",
  6. Description = "出生非贫即贵,你我无能为力,后天若不加以努力赶之超之,又能怪谁呢!自己都靠不住不靠谱,又能靠谁呢!"
  7. };

方式1 (ViewData)

我们利用ViewData以键值对的形式来存储上述实例化的对象,如下:

  1. ViewData["Person"] = p;

在视图中我们从ViewData中获取存储的值并转换成对象,如下:

  1. @using ASP.NET_MVC_1.Models;
  2.  
  3. @{
  4. var p = (Person)ViewData["Person"];
  5. }

接着我们获取对象中的值:

  1. <h1>Person</h1>
  2. <h3>@p.Id</h3>
  3. <h3>@p.Name</h3>
  4. <h3>@p.BlogAddress</h3>
  5. <h3>@p.Description</h3>

我们来看看是否获取到该对象的值,如下:

方式2(ViewBag)

将控制器Action方法以ViewBag创建动态表达式来进行,如下:

  1. ViewBag.Person = p;

在视图中,我们进行如下修改:

  1. @using ASP.NET_MVC_1.Models;
  2.  
  3. @{
  4. var p = ViewBag.Person as Person;
  5. }

获取对象值同上,我们继续看看是否如我们所预想:

方式3(Model)

我们通过控制器中返回的View方法进行传递该对象,如下:

  1. var p = new Person()
  2. {
  3. Id = 98,
  4. Name = "xpy0928",
  5. BlogAddress = "http://www.cnblogs.com/CreateMyself",
  6. Description = "出生非贫即贵,你我无能为力,后天若不加以努力赶之超之,又能怪谁呢!自己都靠不住不靠谱,又能靠谁呢!"
  7. };
  8. return View(p);

此时视图中,我们将需要得到该强类型对象:

  1. @using ASP.NET_MVC_1.Models;
  2.  
  3. @model Person;

而获取对象的值则通过Model来获取,如下:

  1. <h1>Person</h1>
  2. <h3>@Model.Id</h3>
  3. <h3>@Model.Name</h3>
  4. <h3>@Model.BlogAddress</h3>
  5. <h3>@Model.Description</h3>

毫无疑问结果依然如此:

方式4(TempData)

从字面意思来理解我们会误认为是临时对象,好像就使用一次就不会再用了,确实是这样吗?很显然不是这样,当然其生命周期确实很短。该对象是将数据从一个控制器的方法传递到另外一个方法上。什么意思呢?我们想象这样一个场景:当我们在控制器的Info方法上添加一个Person的信息后,我们跳转到另外一个方法TempDataObject上来显示该对象已经成功被创建。

下面我们来演示这种场景:

  1. public ActionResult Info()
  2. {
  3. var p = new Person()
  4. {
  5. Id = 98,
  6. Name = "xpy0928",
  7. BlogAddress = "http://www.cnblogs.com/CreateMyself",
  8. Description = "出生非贫即贵,你我无能为力,后天若不加以努力赶之超之,又能怪谁呢!自己都靠不住不靠谱,又能靠谁呢!"
  9. };
  10. //TODO 添加Person到数据库中
  11. TempData["info"] = "提示:已经成功添加一条数据到数据库中";
  12. return RedirectToAction("TempDataObject");
  13. }

创建一个TempData方法,获取上面传递过来的值,如下:

  1. public ActionResult TempDataObject()
  2. {
  3. return View();
  4. }

在方法对应的视图获取传递过来的值:

  1. <h1>@TempData["info"]</h1>

我们通过访问Info,观察当跳转过来到该方法时后渲染视图是否能够获取到该值:

当然在上述过程中这是利用将一个Action中的数据通过TempData传递到另外一个Action中,但是我们需注意,这是利用跳转到TempDataObject才会正确显示数据,如果我们直接刷新页面将会出现System.NullReferenceException。

ASP.NET MVC之从控制器传递数据到视图四种方式的更多相关文章

  1. ASP.NET MVC之从控制器传递数据到视图四种方式(一)

    前言 本系列开始着手讲述ASP.NET MVC,也算是自己对基础的回顾以及进一步深入学习,保证每天发表一篇该系列文章,关于基本知识则不再叙述,园子有关文章不胜枚举,这一系列若有叙述不当或错误之处,欢迎 ...

  2. ASP.NET MVC之从控制器传递数据到视图方式

    为了演示,先定义一个类 新建基本项目在Models文件夹下定义如下类: public class Person { public int Id { get; set; } public string ...

  3. ASP.NET MVC 5 学习教程:控制器传递数据给视图

    原文 ASP.NET MVC 5 学习教程:控制器传递数据给视图 起飞网 ASP.NET MVC 5 学习教程目录: 添加控制器 添加视图 修改视图和布局页 控制器传递数据给视图 添加模型 创建连接字 ...

  4. ASP.NET MVC中使用Unity进行依赖注入的三种方式

    在ASP.NET MVC中使用Unity进行依赖注入的三种方式 2013-12-15 21:07 by 小白哥哥, 146 阅读, 0 评论, 收藏, 编辑 在ASP.NET MVC4中,为了在解开C ...

  5. 实现web数据同步的四种方式

    http://www.admin10000.com/document/6067.html 实现web数据同步的四种方式 1.nfs实现web数据共享 2.rsync +inotify实现web数据同步 ...

  6. linux下实现web数据同步的四种方式(性能比较)

    实现web数据同步的四种方式 ======================================= 1.nfs实现web数据共享2.rsync +inotify实现web数据同步3.rsyn ...

  7. android 数据存储的四种方式.

    Android系统一共提供了四种数据存储方式.分别是:SharePreference.SQLite.Content Provider和File.由于Android系统中,数据基本都是私有的的,都是存放 ...

  8. [转]JSon数据解析的四种方式

    转至http://blog.csdn.net/enuola/article/details/7903632 作为一种轻量级的数据交换格式,json正在逐步取代xml,成为网络数据的通用格式. 有的js ...

  9. android数据存取的四种方式

    Android系统下有四种数据的存在形式,分别是SQLite,SharePreference,File,ContentProvider.一:特性介绍:SQLite:对于大多数开发者而言,这应该是大家非 ...

随机推荐

  1. leetcode 124. Binary Tree Maximum Path Sum ----- java

    Given a binary tree, find the maximum path sum. For this problem, a path is defined as any sequence ...

  2. spark与storm的对比

    对比点 Storm Spark Streaming 实时计算模型 纯实时,来一条数据,处理一条数据 准实时,对一个时间段内的数据收集起来,作为一个RDD,再处理 实时计算延迟度 毫秒级 秒级 吞吐量 ...

  3. LeetCode(228) Summary Ranges

    Given a sorted integer array without duplicates, return the summary of its ranges. For example, give ...

  4. linux之df命令

    介绍: Linux中df命令可以用来显示目前在Linux系统上的文件系统的磁盘使用情况统计.这些工具可以方便地知道哪些文件系统消耗多少内存.此外,如果被拾起,并且提供一个特定的文件名作为df命令的参数 ...

  5. Oracle学习系列1

    两个服务必须启动: OracleOraDb10g*TNListener 和 OracleService*** 使用sqlplusw先进行环境的设置 set linesize 300 ; set pag ...

  6. Qt消息机制和事件(一)

    一,事件 事件(event)是由系统或者 Qt 本身在不同的时刻发出的.当用户按下鼠标.敲下键盘,或者是窗口需要重新绘制的时候,都会发出一个相应的事件.一些事件在对用户操作做出响应时发出,如键盘事件等 ...

  7. 整合UMDH结果的一个小工具

    ua.exe使用方法: 1.将UMDH生成的logcompare.txt改名为1.txt,内容示例: // Debug library initialized ... DBGHELP: moxia_d ...

  8. SSE入门

    此文主要内容来自这篇文章,本文翻译只求能理解,不求逐句翻译. 正文: 我们将在本文中介绍如何在C++/C中使用SSE指令.我的目的不是用SSE写尽可能快的程序,而是试图讲明白它的使用方法. 什么是SS ...

  9. ViewPager动态加载、删除页面

    很多人在网上说ViewPager的PagerAdapter.notifyDataSetChanged()无效.刚开始我也这样认为,甚至被误导以为是真理.   后来,找了一下,在PagerAdatpar ...

  10. Oracle字符集与客户端

    http://www.linuxidc.com/Linux/2011-11/47383p2.htm 什么是Oracle字符集Oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包容关 ...