ASP.NET MVC之从控制器传递数据到视图四种方式
前言
本系列开始着手讲述ASP.NET MVC,也算是自己对基础的回顾以及进一步深入学习,保证每天发表一篇该系列文章,关于基本知识则不再叙述,园子有关文章不胜枚举,这一系列若有叙述不当或错误之处,欢迎指出以及批评。
前奏
新建基本项目在Models文件夹下定义如下类:

public class Person
{
public int Id { get; set; } public string Name { get; set; } public string BlogAddress { get; set; } public string Description { get; set; }
}

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

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

方式1 (ViewData)
我们利用ViewData以键值对的形式来存储上述实例化的对象,如下:
ViewData["Person"] = p;
在视图中我们从ViewData中获取存储的值并转换成对象,如下:
@using ASP.NET_MVC_1.Models;
@{
var p = (Person)ViewData["Person"];
}
接着我们获取对象中的值:
<h1>Person</h1>
<h3>@p.Id</h3>
<h3>@p.Name</h3>
<h3>@p.BlogAddress</h3>
<h3>@p.Description</h3>
我们来看看是否获取到该对象的值,如下:

方式2(ViewBag)
将控制器Action方法以ViewBag创建动态表达式来进行,如下:
ViewBag.Person = p;
在视图中,我们进行如下修改:
@using ASP.NET_MVC_1.Models;
@{
var p = ViewBag.Person as Person;
}
获取对象值同上,我们继续看看是否如我们所预想:

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

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

此时视图中,我们将需要得到该强类型对象:
@using ASP.NET_MVC_1.Models; @model Person;
而获取对象的值则通过Model来获取,如下:
<h1>Person</h1>
<h3>@Model.Id</h3>
<h3>@Model.Name</h3>
<h3>@Model.BlogAddress</h3>
<h3>@Model.Description</h3>
毫无疑问结果依然如此:

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

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

创建一个TempData方法,获取上面传递过来的值,如下:
public ActionResult TempDataObject()
{
return View();
}
在方法对应的视图获取传递过来的值:
<h1>@TempData["info"]</h1>
我们通过访问Info,观察当跳转过来到该方法时后渲染视图是否能够获取到该值:

当然在上述过程中这是利用将一个Action中的数据通过TempData传递到另外一个Action中,但是我们需注意,这是利用跳转到TempDataObject才会正确显示数据,如果我们直接刷新页面将会出现System.NullReferenceException。
ASP.NET MVC之从控制器传递数据到视图四种方式的更多相关文章
- ASP.NET MVC之从控制器传递数据到视图四种方式(一)
前言 本系列开始着手讲述ASP.NET MVC,也算是自己对基础的回顾以及进一步深入学习,保证每天发表一篇该系列文章,关于基本知识则不再叙述,园子有关文章不胜枚举,这一系列若有叙述不当或错误之处,欢迎 ...
- ASP.NET MVC之从控制器传递数据到视图方式
为了演示,先定义一个类 新建基本项目在Models文件夹下定义如下类: public class Person { public int Id { get; set; } public string ...
- ASP.NET MVC 5 学习教程:控制器传递数据给视图
原文 ASP.NET MVC 5 学习教程:控制器传递数据给视图 起飞网 ASP.NET MVC 5 学习教程目录: 添加控制器 添加视图 修改视图和布局页 控制器传递数据给视图 添加模型 创建连接字 ...
- ASP.NET MVC中使用Unity进行依赖注入的三种方式
在ASP.NET MVC中使用Unity进行依赖注入的三种方式 2013-12-15 21:07 by 小白哥哥, 146 阅读, 0 评论, 收藏, 编辑 在ASP.NET MVC4中,为了在解开C ...
- 实现web数据同步的四种方式
http://www.admin10000.com/document/6067.html 实现web数据同步的四种方式 1.nfs实现web数据共享 2.rsync +inotify实现web数据同步 ...
- linux下实现web数据同步的四种方式(性能比较)
实现web数据同步的四种方式 ======================================= 1.nfs实现web数据共享2.rsync +inotify实现web数据同步3.rsyn ...
- android 数据存储的四种方式.
Android系统一共提供了四种数据存储方式.分别是:SharePreference.SQLite.Content Provider和File.由于Android系统中,数据基本都是私有的的,都是存放 ...
- [转]JSon数据解析的四种方式
转至http://blog.csdn.net/enuola/article/details/7903632 作为一种轻量级的数据交换格式,json正在逐步取代xml,成为网络数据的通用格式. 有的js ...
- android数据存取的四种方式
Android系统下有四种数据的存在形式,分别是SQLite,SharePreference,File,ContentProvider.一:特性介绍:SQLite:对于大多数开发者而言,这应该是大家非 ...
随机推荐
- 深入理解HTTP
深入理解HTTP协议(转) http协议学习系列 1. 基础概念篇 1.1 介绍 HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写.它的发展是万维网协会(Wo ...
- JS版百度地图API
地图的构建非常简单,官方的API文档也写得很清晰,我只做一总结: 一起jquery,17jquery 一.引入JS :这个很容易理解,既然是调用JS版的百度地图,肯定得引用外部的JS文件了,而这个文件 ...
- 数字字符与金钱RMB之间的转换
FormatMoney() 函数,直接将一个数字字符串,转化为 万元,并且格式化小数点保留两位 如右->¥(元.角.分) sprintf("%.2f", $value) ...
- 转-OpenJDK源码阅读导航跟编译
OpenJDK源码阅读导航 OpenJDK源码阅读导航 博客分类: Virtual Machine HotSpot VM Java OpenJDK openjdk 这是链接帖.主体内容都在各链接中. ...
- Python中的repr()函数
Python 有办法将任意值转为字符串:将它传入repr() 或str() 函数. 函数str() 用于将值转化为适于人阅读的形式,而repr() 转化为供解释器读取的形式. 在python的官方AP ...
- zookeeper启动入口
最近正在研究zookeeper,一些心得记录一下,如有错误,还请大神指正. zookeeper下载地址:http://zookeeper.apache.org/releases.html,百度一下就能 ...
- 使用RMAN从磁带库恢复归档文件
最近用RMAN对部分归档日志进行了恢复,在此记录恢复过程 由于不能透漏数据库信息,故举例如下: ORACLE_SID=hrdb 恢复目标路径:/NewRmanbak/restore_archive ...
- WAS维护常用操作
0.WAS学习地址: http://www.open-open.com/doc/list/276?pn=1http://www.doc88.com/p-7498799200332.htmlhttp:/ ...
- JavaScript判断字符串能否转化为数字
判断一个字符串能否转化为数字 我们常常使用parseInt函数. 不过该函数的适用范围是很小的. 一般说来对于 如下类似 var myStr = "123hello"; 使用par ...
- Sass用法指南_20151109笔记
写在前面的话:随着CSS文件越来越大,内容越来越复杂,对其进行很好的维护将变的很困难.这时CSS预处理器就能够帮上大忙了,它们往往拥有变量.嵌套.继承等许多CSS不具备的特性.有很多CSS预处理器,这 ...