问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
你好,欢迎来到懂视!登录注册
当前位置: 首页 - 正文

c#中viewstate用法

发布网友 发布时间:2022-04-27 11:07

我来回答

4个回答

懂视网 时间:2022-04-27 15:28

在web窗体控件设置为runat = "server",这个控件会被附加一个隐藏的属性_ViewState,_ViewState存放了所有控件在ViewState中的状态值。ViewState是一个名称/值的对象集合。当请求某个页面时,ASP.NET会把所有控件的状态序列化成一个字符串,然后作为窗体的隐藏属性送到客户端,当客户端吧页面回传时,ASP.NET分析回传的窗体属性,并赋给控件对应的值。

当我们在写一个asp.net表单时, 一旦标明了 form runat=server ,那么,asp.net就会自动在输出时给页面添加一个隐藏域

<input type="hidden" name="__VIEWSTATE" value="">

那么,有了这个隐藏域,页面里其他所有的控件的状态,包括页面本身的一些状态都会保存到这个控件值里面. 每次页面提交时一起提交到后台,asp.net对其中的值进行解码,然后输出时再根据这个值来恢复各个控件的状态. 我们再看这个控件的value值,它可能类似如下的形式:Oz4+O2w8aTwxPjs+O2w8.... 很多人会认为这是加密的信息,其实不是, ms仅仅是给各个控件和页面的状态存入适当的对象里面,然后把该对象序列化, 最后再做一次base64编码,直接赋值给viewstate控件.

一、ViewState的原理

1.浏览器请求Default.aspx页面

2.在服务器端 发现创建的ViewState 这个时候 会自动创建一个名字叫做__VIEWSTATE(双下滑线 全部是大写)的隐藏域 其隐藏域的值经过base64加密以后返回到浏览器端这一加密过程在页面生命周期的SaveState事件中的SaveAllState方法中完成

3.当浏览器提交表单的时候 将__VIEWSTATE的隐藏域也一起提交到服务端 这个时候 页面生命周期的ReadState事件的ReadAllState方法会将加密后的值反base64解密 最后将值赋值给名字叫做name的ViewState

4.最后来操作ViewState中的值

二、ViewState的用法:

1.定义ViewState属性

public int PageCount{
get{return (int)ViewState["PageCount"];}
set{ViewState["PageCount"]=value;}
}

2.使用ViewState的条件

如果要使用ViewState,则在ASPX页面中必须要有一个服务器端窗体标记(<form runat = "server">)。窗体字段是必须的,这样包含ViewState信息的隐藏字段才能被传回服务器。而且,该窗体还必须是服务器端的窗体,这样在服务器上执行该页面时,ASP.net页面框架才能添加隐藏字段。

page的EnableViewState 属性值为true
控件的EnableViewState 属性值为 true

3.ViewState需要注意的地方

a. 当存在页面回传时,不需要维持控件的值就要把 ViewState 禁止。
b. ViewState的索引是大小写敏感的。
c. ViewState不是跨页面的。
d. 为了能保存在 ViewState中,对象必须是可流化或者定义了 TypeConverter。
e. 控件 TextBox 的 TextMode 属性设置为 Password时,它的状态将不会被保存在 ViewState 中,这应该是出于安全性的考虑。
f. 在页面没有回传或重定向或在回传中转到(transfer)其他页面时不要使用 ViewState。
g. 在动态建立控件时要小心它的 ViewState。
h. 当禁止一个程序的 ViewState 时,这个程序的所有页面的 ViewState 也被禁止了。
i. 只有当页面回传自身时ViewState 才是持续的。

4.设置ViewState

ViewState可以在控件,页,程序,全局配置中设置。缺省情况下 EnableViewState 为 true 。如果要禁止所有页面 ViewState 功能,可以在程序配置中把 EnableViewState 设为 false 。

三、产生的 __VIEWSTATE如图

使用ViewStateDecoder2(ViewState查看器)来看一下值

所以ViewState在安全性上面还是比较差,建议不要存放比较机密和敏感的信息,尽管ViewState可以加密,但是由于ViewState要保存在客户端,天生就有安全性的隐患。

四、viewstate与session的对比

(1) session值是保存在服务器内存上,那么,可以肯定,大量的使用session将导致服务器负担加重. 而viewstate由于只是将数据存入到页面隐藏控件里,不再占用服务器资源,因此, 我们可以将一些需要服务器"记住"的变量和对象保存到viewstate里面. 而sesson则只应该应用在需要跨页面且与每个访问用户相关的变量和对象存储上.

(2) session在默认情况下20分钟就过期,而viewstate则永远不会过期.

但viewstate并不是能存储所有的.net类型数据,它仅仅支持String、Integer、Boolean、Array、ArrayList、Hashtable 以及自定义的一些类型.

任何事物都有两面性, 使用viewstate会增加页面html的输出量,占用更都的带宽,这一点是需要我们慎重考虑的. 另外, 由于所有的viewstate都是存储在一个隐藏域里面,用户可以很容易的通过查看源码来看到这个经过base64编码的值.然后再经过转换就可以获取你存储其中的对象和变量值。

热心网友 时间:2022-04-27 12:36

ViewState["A"]="B"就是将字符串"B"赋值给ViewState["A"],和Session用法差不多,直接在页面里赋值即可。只在本页有效

热心网友 时间:2022-04-27 13:54

它属于环境自定的变量不需要你在重新声明,A你可以根据你的需要自己定义名称,ViewState["A"]="B"就是字符串的赋值。它的作用范围就是当前页面。

热心网友 时间:2022-04-27 15:29

一般来说很少用到操作ViewState的情况

ViewState和session cookie 是一类型的对象,照着操作就行了
c#中viewstate用法

ViewState["A"]="B"就是将字符串"B"赋值给ViewState["A"],和Session用法差不多,直接在页面里赋值即可。只在本页有效

后台c#怎么给前台DIV填HTML值

在后台把要填充的HTML放到viewstate里,然后在DIV里输出这个viewstate就可以填充了

c#如何改变动态生成的按钮的属性

ViewState["DataFieldCount1"] = 0;ViewState["DataFieldCount2"] = 0;} else { for (int counter = 0; counter &lt; (int)ViewState["DataFieldCount1"]; counter++){ AddBtn1();} for (int counter = 0; counter &lt; (int)ViewState["DataFieldCount2"]; counter++){ AddBtn2();} } } ...

怎么让C# ASP.NET程序中的输入文本框保留上次的输入,而不用每次都重新...

ViewState 会自动为你保存的,你只需要设置EnableViewState=true即可,如果保存更多过去输入的数据,建议使用cookie

C#对datagridview数据排序

1.在需要排序的字段里加:SortExpression,如:&lt;asp:BoundColumn DataField="D_DATE" HeaderText="申报日期" SortExpression="D_DATE"&gt; &lt;/asp:BoundColumn&gt; --- 2.在PageLoad()里:(即开始Load页面时以什么方式排序)ViewState["SortOrder"] = "D_DATE";ViewState["OrderDire"] = "ASC";--- 3.在...

c#自定义空间的属性怎么才能实现象下拉列表的Items那样的效果_百度知 ...

Editor(typeof(DropTextEditor), typeof(UITypeEditor)),PersistenceMode(PersistenceMode.InnerDefaultProperty)]//指定属性在服务器控件中保持为内部文本。还指示将该属性定义为元素的默认属性。只能指定一个属性为默认属性 public DropList Items { get { if (ViewState["_items"] == null){ ViewState...

C#调用CPLEX,其变量定义为整数,可求解结果有非整数

把变量存在ViewState 里面 public void Form1_Load(object sender, EventArgs e){ Image img1 = (Image)pictureBox1.Image.Clone();ViewState["Img"]=img1;} public void button3_Click(object sender, EventArgs e){ if( ViewState["Img"]!=null){ Image img1=(Image)ViewState["Img"];pictu...

c#get和set用法详解

1、当引用属性时,除非该属性为赋值目标,否则将调用get访问器读取该属性的值。例如:Employeee1=newEmployee();...Console.Write(e1.Name);//Thegetaccessorisinvokedhereget 访问器必须在return或throw语句中终止,并且控制不能超出访问器体。2、set访问器与返回void的方法类似,它使用称为value的隐式...

C#中未将对象引用设置到对象的实例是什么错误

1、出现“未将对象引用设置到对象的实例”错误,一般是下面的原因:ViewState对象为Null。DateSet为空。sql语句或Datebase的原因导致DataReader空。声明字符串变量时未赋空值就应用变量。2、“未将对象引用设置到对象的实例”是一种常见的错误,通常会在使用C#语言时出现。这个错误的意思是,您试图使用一个...

C#实现。登陆密码错3次,锁定该ID。怎么实现。

用Session存放登录错误次数 登录错误一次,Session中就放1,两次就放2,三次就锁定该账户

声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
如何评价动画女恶魔人 如何评价动画女恶魔人? 途观胎压监测在哪? 勤劳一生什么生肖 一生劳碌一生享最准的生肖 勤劳一生是什么生肖 勤劳一生,终会得奖,天道酬勤作栋梁指是什么生肖,词典梳理落实 温州有哪些性价比高的面馆推荐? 护士执业资格证的照片怎么审核成功 二33乐园怎么下载? 求几张2013元宵节图片 要求像素得在1920*1080以上 元宵节图的介绍 求这张刀剑英雄元宵图片高清图片 广东省中山驾驶证过期可以在深圳换证吗 中山驾驶证换证体检在哪里 中山市大涌镇换驾驶证在哪里 房产过户一般需要几个工作日 viewstate的具体用法 联通靓号最低消费。 是多少啊? asp.net ViewState 用法? asp.net 中的viewstate用法? 中老年女人找男人聊天的微信加入? 如何形容兰花上的兰露 如何成为小宇宙的主播 谁有 工行 农行 或者中国银行的 网银截图啊!!!帮帮小弟吧 我要在手机上查农业银行的语音额 要怎么弄有步骤吗 图片拿来看一下 三星note3呼叫转移通知栏图标怎么去掉 三星手机左上角通知栏的感叹号如何去掉 三星s9左上角通知图标怎么删除 如何去掉三星手机屏幕顶部通知栏点心桌面的图标? asp.net很多控件的viewstate不知有什么用,感觉莫名其妙 糖醋味土豆怎么做好吃 这个土豆怎么做来好吃 asp.net服务器控件的视图状态viewstate - 呼吸爱的声音结局 。 谁知道韩国塞利公主动画片啊`里边的主题歌曲在哪下啊`希望各位大大给个地址 中考填志愿里面的是否服从调剂是什么意思? 关于ASP。NET里的viewstate 指甲软是怎么回事 指甲总是软的,是什么原因? 指甲软是什么原因呢 最近发现指甲变软了是什么原因 指甲变软的原因 请问什么原因导致手指甲盖软? 手指甲盖软怎么回事? 指甲变软是怎么回事 asp.net viewstate 建筑安装工程怎样识图 论文浅谈建筑设备安装识图与施工的认识2000字 什么叫系统图 建筑设备安装工艺与识图
  • 焦点

最新推荐

猜你喜欢

热门推荐