- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Asp.net中static变量和viewstate的使用方法(谨慎)由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
在.Net平台下进行CS软件开发时,我们经常遇到以后还要用到某些变量上次修改后的值,为了简单起见,很多人都习惯用static来定义这些变量,我也是。这样非常方便,下一次调用某个函数时该变量仍然保存的是处理过的值,直接拿来用就可以了。 现在转入了BS软件开发,我们很自然地会沿用这种习惯。如在页面中统计某个按钮被按下的次数,先在类中OnClick事件的处理过程前定义一static变量times,则每次调用该按钮的OnClick事件时,令times增1即可,非常方便: [C#]: 。
在我们庆幸如此方便之余,就未曾意识到我们已经埋下了一棵难以察觉的定时炸弹。为什么哪? 这还要从Asp.net的运行机制谈起。在CS模式软件开发过程中,我们通常不会关心应用程序是在哪里运行的,变量存放在哪里,客户端程序就运行在客户端,服务器端程序就运行在服务器端,一般情况下,二者除了数据库中的数据外基本没有其他共享的东西。所以这时客户端的用户大可放心的使用static变量,因为它们就存放在客户端程序中。 于是我们就习惯的在做BS模式的页面时也用static变量,殊不知Asp.net中的static已不同于CS中的static。原因很简单,就是因为在Asp.net中所有的用户将使用同一个static变量。这就意味着每一个使用该页面的用户对该变量的操作将会影响到其他用户。就拿上面计数器的例子来说,假设times初试值为0,因为此时只有我们自己在使用这个页面,当然不会有什么问题,但如果有两个人同时连接到这个页面,如果A单击了Button1一次,则B刷新页面后Label1将显示1,如果B再单击Button1一次,则times变成2,两个人刷新页面后就出现问题了:A和B都会说,我明明只单击了Button1一次,怎么Label1就显示我单击了两次哪?——这就是因为两个人共用的是服务器上同一个times,任何一个人对times的操作都会在使用该页面的他人的浏览器中表现出来。问题就出在这里。 怎么办哪?还好,除了传统的Asp中的Session对象外,Asp.net提供了一个更好的ViewState对象。ViewState对象用来保存页面中的各种变量,甚至是对象。使用方法和HashTable类似,只要用变量名称做索引,如ViewState["Var"],就可以用存取变量Var的值,而不管Var是普通变量,还是对象,甚至是内存中的一张DataTable,太方便了。为什么可以用ViewState而不能用static变量哪?原因就是服务器端会为每个连接到该页面的用户分别建立一个ViewState,所以ViewState相当于页面级的Session。这下我们可以放心地使用ViewState来存取需要暂存的变量和对象了。 ViewState的用法很简单,如下所示: 1、保存变量到ViewState中: ViewState["times"]=times;//存放普通变量times ViewState["Orders"]=dtOrders;//存放DataTable型对象dtOrders 2、读出ViewState中的值: times=(int)ViewState["times"]; dtOrders=(DataTable)ViewState["Orders"]; 看见了吧?就如此简单!有的朋友会问读出变量的值时为什么要进行强制类型转换?这是因为当变量(不管是int型的普通变量times,还是DataTable型的对象dtOrders)被存放到ViewState中后,ViewState可不管你是普通变量还是对象,统统按Object来对待。所以当我们取出存放在ViewState中的东西时,一定要转换成相应的类型,否则就会报错。而这一操作不用在用ViewState保存变量时进行,系统会自动转换。(注意ViewState括号中的字符串只是为了标识不同变量的索引,用不着非要和变量同名)所以上面计数器的代码应该这样写才好: 。
一般情况向下,将要保存到ViewState中的对象(或变量)用属性的形式来实现会更方便。如对于上述的计数器times,可以这样处理: 。
在这里times将当作私有属性来操作,是不是非常方便? 那是不是说static型变量就没用了哪?当然不是!在C#中用static声明的类不用实例化直接使用。正是由于所有用户共享服务器端的同一个static变量,所以可以用static型对象来存取一些公用的处理模块,比如类型转换、变量验证等工作。所以要根据具体情况而定。 还有一点需要注意:如果在页面中多个过程要共享一个对象或变量,我们在页面类的开始部分定义一个页面级的全局变量是不行的,static本来可以,但上面说了这种类型的变量不安全,所以这时就可以用ViewState。 好了,这下我们可以放心的暂存某些变量或对象了.
最后此篇关于Asp.net中static变量和viewstate的使用方法(谨慎)的文章就讲到这里了,如果你想了解更多关于Asp.net中static变量和viewstate的使用方法(谨慎)的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
如何使用 HttpContext 访问当前页面的 ViewState 我有一个需要实现的 ViewStateUtil 类: public static T GetViewState(ViewS
我们最近将网站迁移到 .NET 4.5,其中一项更改是将 targetFramework="4.5"添加到 httpRuntime 以选择加入 ASP.NET 4.5 行为。一切都按预期工作,直到我们
来自 Microsoft 的页面 Understanding ASP.NET View State : in the instantiation stage of the page life cycl
我在我的 ASPX 页面上禁用了 ViewState: 我有以下类(class): public class DashboardUpdatePanel : UpdatePanel { pub
我同意 the best way to shorten the ViewState is to disable it在不需要它的 ASP.Net 控件上。从一开始就保持小规模是一个好习惯。 我还听说它
我正在解决我们应用程序的一些安全问题,我们将 ViewStateEncryptionMode 设置为 true(在 web.config 中)。我注意到仍然有一个 _VIEWSTATE 字段,现在在
Asp.Net 有一些选项可以影响页面的 ViewState 生成方式(加密、添加 mac、ViewStateUserKey)。 我想自己做,不是基于配置,而是基于我自己的使用其他算法进行序列化和加密
我对如何在 C# 中使用 ViewState 感到困惑,例如使用的好处是什么: ViewState["VST"]="Value1"; Lable1.Text= ViewState["VST"].ToS
背景: 我有一个页面,其中有各种使用 JavaScript 处理的客户端事件。我想将其中一些事件与服务器端事件“同步”,或者以其他方式从代码隐藏调用函数。 我想用 JavaScript 调用的一些函数
我有一个带有 primefaces 3.5 的 JSF 2.2.0-m12 应用程序。由于我将应用程序从 JBoss 7.1.1 移植到 Tomcat 7.0.39,重新加载页面后输入字段(输入文本、
我正在编写一个程序来解码编辑并在 python 中重新编码 ViewState。我已经成功地找到了 View 状态并解码了 base64 编码的字符串,但在尝试反序列化时遇到了困难。有没有办法使用 p
我可以尝试将一些数据保存到 ViewState,但收到此错误:Microsoft JScript 运行时错误:Sys.WebForms.PageRequestManagerServerErrorExc
我在一个页面上有几个 Div 标签,它们是动态的,即根据某些标准,它们对用户可见或不可见。我想将它们添加到页面的 View 状态,以便在回发时它们不会再次隐藏,我该怎么做? 最佳答案 我只会使用 AS
抓这个! 我已经用谷歌搜索了这个。1. 假设我有一个包含几个文本框的网络表单,ID 为 textbox1、textbox2、textbox3。他们都启用了 View 状态。我在这些文本框中放置了一些值
代码隐藏中有一些 View 状态的东西,然后有一个更新面板。当我将其添加到母版页引用的子页面时,它破坏了我之前从用户控件中获得的所有以前可用的功能。 child 掌握后面的页面代码 protected
假设我有一个对象集合 List collection = new List(); 以及将插入这些对象的字典 Dictionary> sections = new Dictionary>(); // e
我编写了一些网页,这些网页使用需要 ViewState 值的常见例程。 能否将 ViewState 传递到函数中? 如果是,怎么做到的? 如果没有,我还能如何从类中的方法访问它们? 最佳答案 这是关键
问题是,我需要在 CallBack 请求期间保留 ViewState。 我知道当请求是 CallBack 时,ASP.NET 默认情况下不会保存页面状态。所以,我需要一个替代方案来让它工作。 ASP.
我有一个 List 类型的列表.我想将它存储在 ViewState 中。如何做到这一点? private List JobSeekersList { get; set; } 最佳答案 基本上你只需要使
我编写了一个 ASP.NET 应用程序,它在服务器的 IIS7 中运行。如果我在浏览器中打开此网络表单并向我显示站点代码,我会看到... 我有很多控件,如按钮、标签、文本框和 ListView。我尝试
我是一名优秀的程序员,十分优秀!