日期:2014-05-17  浏览次数:21521 次

浅谈"__viewstate" and"__eventvalidation"
 平时都不怎么注意,ViewState,只是知道它存储的是非表单元素,如,label、div。也没有注意到__eventvalidation这东东,今天测试了一下,每次拖一个 asp.net封装的控件到其 form中,都发现这两个字段("__viewstate" and"__eventvalidation")都发生了变化。
如,当我拖一个 asp.net内部封装了的"textbox",是表单元素,发现这两个字段都变化了···
尤其是 ViewState,更奇怪了。"textbox"怎么和ViewState有关!

------解决方案--------------------
viewstate,控件的视图状态,用于在页面的多个版本之间维护控件相关(例如属性)的值。
------解决方案--------------------
__EVENTVALIDATION
“id”属性为“__EVENTVALIDATION”的隐藏字段是ASP.NET 2.0的新增的安全措施。该功能可以阻止由潜在的恶意用户从浏览器端发送的未经授权的请求.

为了确保每个回发和回调事件来自于所期望的用户界面元素,ASP.NET运行库将在事件中添加额外的验证层。服务器端通过检验表单提交请求的内容,将其与“id”属性为“__EVENTVALIDATION”隐藏字段中的信息进行匹配。根据匹配结果来验证未在浏览器端添加额外的输入字段(有可能为用户在浏览器端恶意添加的字段),并且该值是在服务器已知的列表中选择的。ASP.NET运行库将在生成期间创建事件验证字段,而这是最不可能获取该信息的时刻。像视图状态一样,事件验证字段包含散列值以防止发生浏览器端篡改。
说明:“id”属性为“__EVENTVALIDATION”隐藏字段一般在表单的最下方,如果表单在浏览器端尚未解析完毕时,用户提交数据有可能导致验证失败。

=================================