Action向视图传值的6种方式(转)
在使用ASP.NET MVC进行项目开发时,经常会碰到从Action向视图传值的问题,今天我就把我所知道的方式总结了一下,分成了以下六种:
1.使用ViewData进行传值
在Action中,有如下代码:ViewData["name"] = "Vibin1";
则在视图中可以这样接收:姓名:@ViewData["name"]
注意:ViewData是一个简单的字典,它的生命周期和所请求的View是一样的,仅对当前View有效。
2.使用ViewBag进行传值
在Action中,有如下代码:ViewBag.name = "Vibin2";
则在视图中可以这样接收:姓名:@ViewBag.name
注意:上面的ViewBag本质上是通过ViewData进行传值的,所以当同时使用ViewData和ViewBag的时候,如果定义的变量一样,那么前面的会被后面的所覆盖,像本文中1、2两种方式一起使用都会显示:姓名:Vibin2。如果非要使用这两种传值方式且不会产生覆盖现象,那么必须保证变量名不同。
3.使用TempData进行传值
在Action中,有如下代码:TempData["name"] = "Vibin3";
则在视图中可以这样接收:姓名: @TempData["name"]
注意:TempData保存在Session中,这种方法可以跨Action使用。Controller每次请求的时候会从Session中获取TempData并清空Session,因此TempData中的数据最多只能经过一次Controller传递。
4. 把对象当做返回视图时的参数,通过Model接收
在Action中,有如下代码:
Person p= new Person() { Name = "Vibin4" };
return View(p);
Person类定义如下:
public class Person
{
public string Name { get; set; }
}
则在视图中可以这样接收:
姓名: @{ Person p = Model as Person; } @p.Name
注意:在视图页面需要引入Person类的命名空间,且Person需要定义成公有的。这个本质上也还是通过ViewData中的Model对象进行传值的,因此对于View()的重载,只要参数带有object model的都可以借此传值,即下图红框标记的重载。
5.可以使用Redirect()方法,这个方法传入Url,可以考虑在Url后面带参数
在Action中,有如下代码:return Redirect( "/Another/Index?name=Vibin5" );//Another是另一个控制器名称
则在视图中可以这样接收:姓名:@Request.Params["name"]
注意:这里由于是跳转,视图是另一个Controller下的Action对应的视图。
如果Url是这种方式:"/Another/Index/Vibin5" ,
则在视图中可以这样接收:姓名:@Html.ViewContext.RouteData.Values["id"]
同样,使用@Request.RequestContext.RouteData.Values["id"]或者@Html.ViewContext.RouteData.Route.GetRouteData(Html.ViewContext.HttpContext).Values["id"]也能接收到值。这是默认路由规则下的写法,默认路由设定为:{controller}/{action}/{id},路由规则没改,视图中接收的变量就只能写id不能改成name 。
6.可以使用RedirectToAction()方法,这个方法返回重定向结果对象,在该方法里传入object对象作为参数
在Action中,有如下代码:return RedirectToAction("Index", "Another", new { Name="Vibin6" });//借用前面定义的Person类
则在视图中可以这样接收:姓名:@Request.Params["name"]
注意:这里由于是跳转,视图是另一个Controller下的Action对应的视图。RedirectToAction()方法有以下重载,只要参数带有object routeValues的都可以用来传递对象,详见下图红框标识。
*另外,第5、第6的示例中,用于视图接收Url参数的Request.Params[]还可以换成Request[]或者Request.QueryString[]。
Action向视图传值的6种方式(转)的更多相关文章
- Action向视图传值的6种方式
在使用ASP.NET MVC进行项目开发时,经常会碰到从Action向视图传值的问题,今天我就把我所知道的方式总结了一下,分成了以下六种: 1.使用ViewData进行传值 在Action中,有如下代 ...
- MVC中控制器向视图传值的四种方式
MVC中的控制器向视图传值有四种方式分别是 1 ViewDate 2.ViewBag 3.TempDate 4.Model 下面分别介绍四种传值方式 首先先显示出控制器中的代码 using S ...
- 第三节:Action向View传值的四种方式(ViewData、ViewBag、TempData、Model)
简 介 在前面的章节中,我们已经很清楚,MVC工作模型的流程,Controller中的Action接收到客户端的请求,处理后要将数据返回给View,那么Action中是如何将数据返回给View的,二 ...
- EF5+MVC4系列(7) 后台SelectListItem传值给前台显示Select下拉框;后台Action接收浏览器传值的4种方式; 后台Action向前台View视图传递数据的四种方式(ViewDate,TempDate,ViewBag,Model (实际是ViewDate.Model传值))
一:后台使用SelectListItem 传值给前台显示Select下拉框 我们先来看数据库的订单表,里面有3条订单,他们的用户id对应了 UserInfo用户表的数据,现在我们要做的是添加一个Ord ...
- ASP.NET 页面之间传值的几种方式
开篇概述 对于任何一个初学者来说,页面之间传值可谓是必经之路,却又是他们的难点.其实,对大部分高手来说,未必不是难点. 回想2016年面试的将近300人中,有实习生,有应届毕业生,有1-3年经验的,有 ...
- 【ASP.NET MVC系列】浅谈ASP.NET 页面之间传值的几种方式
ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ...
- MVC5控制器传值的三种方式(ViewData,ViewBag,TempData),刚刚学习MVC5的新手,希望各位大神多多指教
mvc传值的三种方式:1.ViewData 在使用过程中需要类型转换 例子: ViewData["MyTitle"]="ViewData传值"; 引用: @Vi ...
- Struts2(四.注册时检查用户名是否存在及Action获取数据的三种方式)
一.功能 1.用户注册页面 <%@ page language="java" contentType="text/html; charset=UTF-8" ...
- ASP.NET页面间传值的几种方式
ASP.NET页面间传值的几种方式 1.使用QueryString 使用QuerySting在页面间传递值已经是一种很老的机制了,这种方法的主要优点是实现起来非常简单,然而它的缺点是传递的值是会显示在 ...
随机推荐
- Qt编写自定义控件18-魔法小鱼
前言 上次发了个纯painter绘制的老鼠,那个就是qt目录下的demo,改的,只是比demo中的老鼠稍微胖一点,估计人到中年都发福吧.这次来一个魔法小鱼,这条鱼可以变换颜色,尾巴还会摇动,可以设定旋 ...
- mybatisplus
1.selectById 根据主键查询一个对象,如果没有查到,则返回null: GxySchoolDto isExist = gxySchoolMapper.selectById(schoolEnti ...
- Mysql执行查询语句慢的解决方式
MySQL使用的是InnoDB引擎.不同于MyISAM引擎只提供表锁,InnoDB提供不同级别的锁.但是在我们日常的操作过程中经常由于对数据库不当的SQL操作导致出现长时间的锁,造成其他的SQL语句长 ...
- confilicts
confilicts 矛盾; 冲突 安装软件提升这个表示安装软件之间的冲突,需要卸载冲突的软件再安装
- linux下正确卸载rpm包
linux下正确卸载rpm包 rpm -qa | grep -i ntp 执行结果: [root@bogon elasticsearch-head]# rpm -qa | grep -i ntp fo ...
- .Net Core WebApi上传图片的两种方式
我这边主要是为了上传图片,话不多说,上代码. 方式一:通过Form表单上传 后端: /// <summary> /// 上传图片,通过Form表单提交 /// </summary&g ...
- 利用canvas对图片进行切割
使用input标签选择一张图片, 然后利用canvas对图片进行切割, 可以设置切割的行数和列数 这是html代码 ... <input type="file" id=&qu ...
- Unity热更新 xLua
xLua是Unity3D下Lua编程解决方案,自2016年初推广以来,已经应用于十多款腾讯自研游戏,因其良好性能.易用性.扩展性而广受好评.现在,腾讯已经将xLua开源到GitHub. 2016年12 ...
- 条件DCGAN(2019/09/10)
最近看到keras的官方GAN代码中有CGAN(全连接层)和卷积GAN(DCGAN),但他并没有给出“条件卷积GAN”,预测就把这两者结合了一下.虽然很多人用其他框架(e.g.TensorFlow)写 ...
- [bzoj3357][Usaco2004]等差数列_动态规划_贪心
[Usaco2004]等差数列 题目大意:约翰发现奶牛经常排成等差数列的号码.他看到五头牛排成这样的序号:“1,4,3,5,7”很容易看出“1,3,5,7”是等差数列.给出N(1≤N≤2000)数字A ...