浅谈ASP.NET中ViewState与ViewData的区别
来源:互联网 发布:hm淘宝旗舰店 编辑:程序博客网 时间:2024/05/29 11:15
在WebForm的代码页面(如.aspx.cs)中定义ViewState:
ViewState["test"] = "abc";
在显示页面(如.aspx)中就可以用:
< %=ViewState["test"] %>
进行输出
在MVC中的Controller中定义:
ViewData["test"] = "abc";
同样也可以在视图而中用:
< %=ViewData["test"] %>
进行输出
ViewState与ViewData,这有区别吗?
有人可能会说在WebForm模式中如果设置了EnableViewState="false",那么ViewState就不能用了,真的这样吗?经测试发现无论EnableViewState为true或false,上面给的<%=ViewState["test"] %>都是可以正常输出值的
那是不是说在WebForm中就可以像MVC中那样用ViewState来代替ViewData了呢?
MSDN对ViewState的定义:
获取状态信息的字典,这些信息使您可以在同一页的多个请求间保存和还原服务器控件的视图状态。
代码定义是这样的:
protected virtual StateBag ViewState { get; }
可以看到此属性中只有get方法,也就是说此属性是只读的,可能你会说上面用的:ViewState["test"] = "abc";不是在为它赋值吗?这是因为ViewState是StateBag 类的一个实例,而StateBag类是一个实现了字典接口,所以ViewState是可以存储键值对形式的数据的,只是你不能做类似这样的操作:ViewState = new StateBag...因ViewState 是只读的,而MVC中的ViewData是可读写的,其代码定义为:public ViewDataDictionary ViewData { get; set; }
所以区别一就是:ViewState是只读的,ViewData是可读写的(可被重新定义)
区别二:ViewData可用于一次http请求中的所有视图页,如:.aspx/.ascx...,而ViewState只能用于当前后端代码文件所在的前端显示页。
比如:页面control.ascx存在于页面default.aspx中,那么在default.aspx.cs中定义的ViewState["test"]在control.ascx是取不到的。
区别三:ViewState主要用来记录服务器控件的状态信息,asp.net引擎会自动填充服务器控件的状态信处到里面,所以最好不要使用ViewState存放自己的值。
区别四:为了保证ViewState可以正确记录服务器控件的状态信息,ViewState中的值应该都是可以转为字串形式的(可序列化),而ViewData是可以用来保存各种类型的值的。
我目前就发现这几点,希望大家可以继续补充,不正确的地方也请指正,谢谢。
- 浅谈ASP.NET中ViewState与ViewData的区别
- asp.net mvc中TempData和ViewData的区别
- ASP.Net MVC中 ViewBag, ViewData, TempData, ViewModel 的区别
- Asp.net MVC中ViewData与ViewBag的使用方法
- 浅谈DOTNET大规模团队开发控制与asp.net中webform的viewstate
- Asp.net MVC中ViewData、ViewBag和TempData区别
- 关于Asp.net中static与ViewState使用的探讨
- 关于Asp.net中static与ViewState使用的探讨
- asp.net MVC-- viewbag和viewdata的区别
- ASP.NET中ViewState
- ASP.NET中ViewState的全面研究
- ASP.NET中ViewState对象的使用
- asp.net中viewState的应用
- asp.net 的viewstate
- ViewData与TempData的区别
- viewData与ViewBag的区别
- Asp.net MVC中的ViewData与ViewBag
- Asp.net MVC中的ViewData与ViewBag
- poj 1458 hdoj 1159 Common Subsequence
- HOW TO START A SINGLE MULTI SOURCE REPLICATION WITH WINDOWS + MARIADB 10.0.0
- properties配置文件将中文转换为unicode
- 如何在VC下检测当前存在的串口及串口热拔插
- jvm调优(二)概念
- 浅谈ASP.NET中ViewState与ViewData的区别
- Windows下ora-01031:insufficient privileges
- GUI系统之SurfaceFlinger(14)handleTransaction
- thinkphp关联查询(多表查询)
- hdu 4604 Deque (二分法求最长单调子序列)
- 6 Java学习之 枚举
- Android menu默认样式的设置
- jvm调优(三)
- java.sql.SQLException: Invalid Oracle URL specified