Controller向View传值方式总结
From: http://www.cnblogs.com/guohu/p/4377974.html
总结发现ASP.NET MVC中Controller向View传值的方式共有6种,分别是:
- ViewBag
- ViewData
- TempData
- 向普通View页面传一个Model对象
- 向强类型页面传传一个Model对象
- 用一个ViewModel对象解决所有问题
首先我们需要明确的是我们从controller向view传值的时候,这些方式分别处于什么样的地位:
我们一般会向页面传递一个主要的类型的数据,一般是情况下是一个List<Model>,如果只有这个,很好办,一个model对象就解决了,但是往往除此之外还会有一些额外的零散的数据需要传递,比如分页的pageIndex,或者pageCount等等,这样的数据用原有的model就无能为力了,这时候,我们就可以用ViewBag、ViewData、TempData来传递这些额外的数据。
ViewBag、ViewData、TempData之间的差别:
ViewData与ViewBag之间非常相似,两者使用的场景基本一致,但是ViewData的类型是很明确的,使用的时候经常需要强制类型转换,而ViewBag的类型是动态的,不确定的,直接就可以使用,他们的传值范围是:controller向view传值,view自己和自己传值。而TempData存在的目的就是为了防止redirect时候数据的丢失,所以它的传值范围是当前controller和跳转后的controller之间。
下面来详细的讲述他们的具体用法:
ViewBag
我们可以认为 ViewBag=ViewData+Dynamic wrapper around the ViewData ,接下来你就可以体会到这个公式的含义了。
1、conroller向view传值
2、view向view传值:
3、利用ViewBag传递一个对象:
ViewData
1、ViewData的基本用法
2、ViewData 转换成 ViewBag:
3、ViewBag 转换成 ViewData:
TempData
TempData用于在Redirect的时候保存数据,ViewData、ViewBag在跳转后就会变成null,但是TempData不会,下面是TempData的用法示例:
{
var model = new Review()
{
Body = "Start",
Rating=5
};
TempData["ModelName"] = model;
return RedirectToAction("About");
}
<pre><pre lang="cs">public ActionResult About()
{
var model= TempData["ModelName"];
return View(model);
}
普通页面传递model:
public ActionResult Index()
{
Product p = new Product();
p.Name = "Toy";
return View(p);
}
在View中调用的代码:
Product : <%: ((Product)Model).Name %>
向强类型试图传递model
1、WebForm Engine的试图的实现:
public ActionResult Index()
{
Product p = new Product();
p.Name = "Toy";
return View(p);
}
View中的代码
声明类型
<%@ Page Inherits="System.Web.Mvc.ViewPage<Product>" %>
直接用Model调用该对象
<h2> Product Name: <%: Model.Name %> </h2>
2、Razor Engine的实现:
@model Mvc3App.Models.Product
在Razor中调用对象的方式:
<h2> Product: @Model.Name </h2>
程序员的基础教程:菜鸟程序员
Controller向View传值方式总结相关推荐
- ASP.NET中添加View与Razor引擎以及View解析和Controller向View传值
场景 ASP.NET中MVC添加Controller以及访问其Action: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/106 ...
- ASP.NET MVC中controller和view相互传值的方式
ASP.NET MVC中Controller向view传值的方式: ViewBag.ViewData.TempData 单个值的传递 Json 匿名类型 ExpandoObject Cookie Vi ...
- MVC 各种传值方式 ASP.NET MVC view与controller传值方式
MVC 各种传值方式 ViewData传值. HomeController.cs Co de: public ActionResult Index() { ViewData["T ...
- iOS 页面间几种传值方式(属性,代理,block,单例,通知)
第二个视图控制器如何获取第一个视图控制器的部分信息 例如 :第二个界面中的lable显示第一个界面textField中的文本 这就需要用到属性传值.block传值 那么第一个视图控制器如何获的第二个视 ...
- ASP.NET MVC3中Controller与View之间的数据传递总结
一. Controller向View传递数据 1. 使用ViewData传递数据 我们在Controller中定义如下: [csharp] view plaincopy print? V ...
- MVCWebForm对照学习:传值方式
刚从webform开发转到mvc,如果说像路由这样稍微复杂一点的知识点还可以暂时先放一放(前提是默认的路由规则基本满足大部分需求),那有个问题在快速开发中,我想是必须要当即解决的,那就是webform ...
- 微信小程序四种父子相互传值方式
微信小程序四种父子相互传值方式 1. 绑定自定义属性(父传子),触发自定义方法 (子传父) 原生微信小程序+uni-app都可以实现 父组件: <template><view cla ...
- 【转载】ASP.NET MVC中Controller与View之间的数据传递总结
在ASP.NET MVC中,经常会在Controller与View之间传递数据,因此,熟练.灵活的掌握这两层之间的数据传递方法就非常重要.本文从两个方面进行探讨: Ø Controller向View传 ...
- ios 给网页传值_ios常见的页面传值方式
iOS页面间的传值细分有很多种,基本的传值方式有三种:委托Delegate传值.通知NSNotification传值.Block传值,其他在项目中可能会遇到的还有:UserDefault或文件方式传值 ...
最新文章
- 无线通信原理及协议栈(ZigBee、蓝牙等)解析
- 编译问题一 undefined reference to `EVP_sha1' ‘RAND_byte’ ‘DES_key_sched’ 问题解决
- 微信开发修改button里的字体大小_微信小程序全栈开发课程【视频版】2.2 index页面完善...
- 文件字节输入流 java
- flex java 全局拦截_Flex CSS阻止底层内容
- zabbix的boot.log占满根目录不能ssh连接No space left on device
- Media Player Classic - HC 源代码分析 1:整体结构
- 聊聊lettuce的sentinel连接 1
- 电子海图与雷达图像的融合显示
- 理解SSD核心技术FTL
- 你知道什么是MEMS传感器吗?
- 服务器维护必刷稀有宠物,完美国际2稀有宠物坐标及刷新时间(记得去抓)!!!...
- 百度世界地图实现方法
- 解题:由乃OI 2018 五彩斑斓的世界
- 【Threejs效果:挖空几何体】ThreeBSP实现墙体挖洞
- 关于鼠标手的症状和恢复方法
- c语言printf( aaa ),有大佬知道那里错了吗。aaa=jia();那报错了#incl
- app小程序手机端Python爬虫实战01-Uiautomator2自动化抓取工具介绍
- 5位评委对参赛选手进行打分,将所有的打分结果存储到对应类型的数组中, 将所有的评分结果去除一个最低分,去除一个最高分,然后获取的平均分数为 选手的最终得分.设计程序,用键盘输入5位评委的评分,并打印输
- MBA数学备考指南,不看你后悔