ASP.NET MVC 基础--------数据传递

前言

大家好,我是大成子。之前有朋友去面试,面试官问了一个这样的题:在http://ASP.NET MVC 中视图和控制器之间有哪几种数据传递方式?今天大成子就带大家一起来探讨C(控制器)向V(视图)【前端视图向控制器发送请求传输的数据的方式本次这里不做赘述了,有机会再做分析和分享】传输数据有哪几种方式。(ViewData/ViewBag/TempData/model)

ViewData

第一个是ViewData,它用来存储存储String Key/Object的值。它是一个继承自ViewDataDictionary类的Dictionary对象,用来从Controller中的Action向对应的View传递数据。注意:ViewData只能在本控制器本action中向对应的视图传递数据,生命周期和View一样,如果有重定向,则ViewData存储的数据会丢失变成Null。在取出的时候要注意类型的适当转换。下面我们通过代码来看看ViewData的使用。

新建一个Core Web应用程序,起名为ControllerToView

选择MVC模板,取消https配置,选择不进行身份验证

格式:ViewData["key"]=value,如上两图所示,我在Home控制器的Index动作方法当中定义了一个用来存储用户名的ViewData,在视图中用Razor语法@加C#代码,可以通过键的方式取出Action中存储的数据并输出,如下图所示:

前面我有讲过,ViewData存储简单,但是取出的时候是要进行数据转换的,这里的string或者int类型只不过自动转换了,那假如我要传输一个对象的集合怎么办呢?下面我们来看看

上图为数据集的初始化,注意:其实根据面向对象OOP的对象单一职责和迪米特法则,我的实体类和业务逻辑是不应该写在控制器当中的,我这里是为了方便讲述。大家实际开发当中还是要有良好的代码规范和习惯的,不要学我(#^.^#)

取出数据集,并在前端循环输出,很明显,报错了,它的意思是说这个object它识别不了,不能循环遍历。我们做一下类型转换,注意:顶部引入Student类所在的命名空间,如下图:

页面结果如下:

前面讲过:ViewData、ViewBag等这种传输方式,可以直接用(他们都是父类Controller的成员),并且只能向本控制器的本动作方法对应的视图传输数据,如果重定向,则数据会丢失,下面我们来试验一下:

新建另一个控制器DataPass,在Index中初始化储存ViewData pwd的值,并重定向到Home/Index,在Home的index视图中显示数据。启动程序,在浏览器中输入/DataPass/Index,如下图所示

它会重定向到Home/Index的视图当中去:

并没有传过来。下面再试试跨视图看是否能传输,

在Home控制器任意非Index的动作方法中定义pwd的数据存储,测试结果显示还是没有显示.我们再在Index中定义,这时页面显示有数据!

ViewBag

第二个是ViewBag,它是一个动态类型变量(dynamic),这是C# 4.0引入的新特性,变量类型会在运行时进行解析。它里面其实有ViewData的包装,也用于C向V传递数据。同样,它的生命周期也和当前的Action同存亡,重定向或者请求结束,它的使命也就结束了。由于它是动态类型变量,所以在取出数据的时候不需要进行类型转换!下面演示一下:

测试结果如下图:

TempData

第三个则是TempData,它是一个继承自TempDataDictionary类的字典对象,它默认情况下是基于Session存储机制之上的,它与Session的区别就在于,TempData取了一次之后,就会自动销毁,而Session是有时长有效期的,在有效期内可以无限使用。TempData可以跨控制器、Action传输数据,你可以在其他地方定义,等需要用的时候去寻找,储存,并在需要的视图中展示,关于TempData的演示,我这里就不做演示了。

model

在控制器中还可以将数据模型,在返回视图的时候给传输过去。

注意用model传给动作方法对应的视图时,要在页面声明model的数据类型,不然无法解析。如下图所示:

End

好了本篇的学习就到这里了,还有任何交流和补充欢迎私信小编。看一万遍,不如自己手动敲一遍。

欢迎关注微信公众号:dotNET学习天地

期待您的交流,愿共同进步。

原文地址:https://www.cnblogs.com/xingxingzhou/p/11666329.html

时间: 2024-07-31 21:30:39

ASP.NET MVC 基础--------数据传递的相关文章

详细介绍ASP.NET页面间数据传递的使用方法

在ASP.NET中,页面间数据传递的方法有很多.下面为大家总结一下,页面间数据传递的方法. Web页面是无状态的,服务器对每一次请求都认为来自不同用户,因此,变量的状态在连续对同一页面的多次请求之间或在页面跳转时不会被保留.在 用ASP.NET 设计开发一个Web系统时, 遇到一个重要的问题是如何保证数据在页面间进行正确.安全和高效地传送,Asp.net 提供了状态管理等多种技术来解决保存和传递数据问题,以下来探讨.NET 下的解决此问题的各种方法和各自的适用场合. 一.ASP.NET页面间数据

ASP.NET页面间数据传递的方法

本文我们将讨论的是asp.net页面间数据传递的几种方法,对此希望能帮助大家正确的理解ASP.NET页面间数据传递的用处以及便利性. 引言 Web页面是无状态的, 服务器对每一次请求都认为来自不同用户,因此,变量的状态在连续对同一页面的多次请求之间或在页面跳转时不会被保留.在用ASP.NET 设计开发一个Web系统时, 遇到一个重要的问题是如何保证数据在页面间进行正确.安全和高效地传送,Asp.net 提供了状态管理等多种技术来解决保存和传递数据问题,以下来探讨.NET 下的解决此问题的各种方法

ASP.NET MVC 中将数据从View传递到控制器中的三种方法(表单数据绑定)

转自:http://www.cnblogs.com/zyqgold/archive/2010/11/22/1884779.html 在ASP.NET MVC框架中,将视图中的数据传递到控制器中,主要通过发送表单实现的.具体使用中,主要使用以下三种方法. 1.通过Request.Form读取表单数据        2.通过FormCollection读取表单数据        3.直接读取表单数据对象 下边是我学习这些东西时的一点总结 1.通过Request.Form读取表单数据      首先定

ASP.NET MVC 基础

ASP.NET MVC oo1 Mvc准备工作课程安排:ORM->AspNet MVC开发环境:VS2012/VS2013SqlServer2008/2005主讲Asp.Net Mvc4 Razor官网:http://www.asp.net/mvc/mvc4 002 自动属性知识储备:自动属性隐式类型 var匿名类对象初始化与集合初始化扩展方法Lambda表达式Product(Id,Name,Description,Price,Category) 003 var关键字var num=10;var

解决ASP.NET MVC(post数据)Json请求太大,无法反序列化(The JSON request was too large to be deserialized)

这个问题出现的场景并不是很多,当你向服务端异步(ajax)post数据非常大的情况下(比如做权限管理的时候给某个角色分配权限那么就可能会出现,我所遇到的就是该角色大概200个模块每个模块平均2个功能----那么发送到服务端action的将是一个有着400个对象的数组) 之前我们向服务端异步post数组可能需要使用 1 $.ajax({ 2 type: 'POST', 3 url: '/system/SaveRoleReModule', 4 dataType: "json", 5 con

ASP.NET MVC基础入门.

一:ASP.NET MVC 简介 1:asp.net mvc 是一种构建web应用程序的框架,他将一般的MVC(Model--View--Controller)模式应用于asp.net框架. 2:asp.net MVC 和 asp.net 框架之间的关系: asp.net 框架分为两层抽象: SYSTEM.WEB.UI:web Forms层,主要由服务器控件和ViewState等组成 SYSTEM.WEB    :管道程序,提供基本的web堆栈,包括组件模块,处理程序和HTTP堆栈等. 在应用a

MVC总结--数据传递

View->Controller 1.传统方式,Get方式提交,在Controller中获得客户端请求: string Name = Request["name"]; string Id=Request .QueryString ["id"]; 2.超链接方式 在超链接中传参,改进了原来的<a></a> <%:Html .ActionLink ("链接","Index","Home

MVC中数据传递 ViewBag的使用

ViewBag MVC3中 ViewBag.ViewData和TempData的使用和区别 在MVC3开始,视图数据可以通过ViewBag属性访问,在MVC2中则是使用ViewData.MVC3中保留了ViewData的使用.ViewBag 是动态类型(dynamic),ViewData 是一个字典型的(Dictionary). ViewBag和ViewData的区别: ViewBag 不再是字典的键值对结构,而是 dynamic 动态类型,它会在程序运行的时候动态解析.所以在视图中获取它的数据

ASP.NET MVC 基础(01)

[ASP.NET MVC ]系列文章大致会包含这样一些内容: 1.ASP.NET MVC 的一些高级知识点: 2.ASP.NET MVC 的一些最新技术: 3.ASP.NET MVC 网站安全方面的知识: 4.缓存.日志和网站优化方面的知识: 5.一些常见的第三方组件的使用(如轻量级ORM - Dapper,Ninject等) 6.完整的项目实例 - 个人独立博客系统(只用于学习,博客园非常好,个人觉得没必要去建设一个自己的独立博客): 7.一些建站方面的知识分享.