CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  ASP.NET

Page_Load()给全局变量赋值,别的控件为何得不到它赋的值呢???

楼主ghx88(辉)2005-03-04 00:26:54 在 .NET技术 / ASP.NET 提问

public   class   Test:System.Web.UI.Page  
  {  
        protected   System.Web.UI.WebControls.Button   btn1;  
        private   int   i;  
         
        private   void   Page_Load(object   sender,   System.EventArgs   e)  
        {  
          ……  
          i   =   100;  
          ……  
        }  
         
        private   void   btn1_Click(object   sender,   System.EventArgs   e)  
        {  
            Response.Write("i   =   "   +   i);       //i   =   0   ???????  
        }  
   
  }  
  为什么会这样???? 问题点数:10、回复次数:15Top

1 楼saucer(思归)回复于 2005-03-04 00:32:29 得分 1

1.   are   you   sure   Page_Load   is   executed?   did   you   hook   up   Page_Load   with   Page's   Load   event?  
  2.   make   sure   i=100   is   not   inside   if   (!IsPostBack)Top

2 楼noyester()回复于 2005-03-04 00:34:22 得分 1

思归大哥说的没错  
  记得新建立每个新页面的时候,最先做的事情就是加  
    if   not   me.ispostback  
   
  end   ifTop

3 楼ghx88(辉)回复于 2005-03-04 00:40:28 得分 0

Page_Load是运行了,i   也赋给了其它函数并正确运行,i   也放在if(!IsPostBack){……}中了,但btn1_Click()中的i还是初始值!我试过i   加上   static   关键字就可以,不过我就是不明白为何是这样的?Top

4 楼ghx88(辉)回复于 2005-03-04 00:42:57 得分 0

第一次运行时Page_load就赋值给i了,就算回不回传i   也应该是100,这与IsPostBack无关!Top

5 楼ghx88(辉)回复于 2005-03-04 00:52:13 得分 0

啊!我发现问题了!   i放在if(!IsPostBack){……}中   i   ,btn1就得不到正确的值,反之就正常!为何这样呢?难道if(!IsPostBack){……}中的   i   是自动生成的吗??此   i   不是彼   i   ??Top

6 楼saucer(思归)回复于 2005-03-04 00:53:35 得分 0

come   on,   when   you   do   a   postback,   the   code   inside   the   if   block   will   not   be   executedTop

7 楼lau_marco(青苹果)回复于 2005-03-04 00:55:49 得分 1

是不是要把private换成public???Top

8 楼lau_marco(青苹果)回复于 2005-03-04 01:10:07 得分 1

加了static时,该变量就成了全局变量了,当然可在类中的方法中传递了  
  但现在的private是不行的Top

9 楼eagle40(老鹰)回复于 2005-03-04 02:49:42 得分 1

其实不论是在第一次加载Page,还是后续的PostBack,所有的变量都被Reset了。所以把i放在if   block中,在PostBack时是不会被赋值的(保持了默认的值:0)。  
  搂住大概是从winform转过来的。在winform中使用没有赋值的变量是不能通过编译的,但在webform中系统是不做检查的。Top

10 楼LoveCherry(论成败,人生豪迈;大不了,重头再来!^_^)回复于 2005-03-04 07:07:02 得分 1

http://blog.csdn.net/lovecherry/archive/2005/03/01/306012.aspx  
  再看看我的问题吧:)Top

11 楼ghx88(辉)回复于 2005-03-04 08:16:44 得分 0

我还是似懂非懂的Top

12 楼zhang5wen(搏击风云)回复于 2005-03-04 08:47:19 得分 0

添加一个独立的CS模块或类文件,把private   int   i;改public   int   i;就可以了  
  Top

13 楼shield0771(shield)回复于 2005-03-04 09:26:04 得分 2

以前也碰到这个问题,我的理解是ASP.NET页面生命期造成的  
  在WEB中类的实例并不像WINDOWS中一样NEW了以后就可以一直使用,WEB页面是在每次客户请求时重新实例化类的新实例,这个实例在完成此次请求并把需要的数据发送回客户端后就释放了,下一次请求又会生成新的实例处理数据;因为是每次请求都生成新的实例,系统会用视图状态来保存一些客户端设置值和属性来填充新实例保证操作过程的连贯(确保不丢失页面数据,使两次请求后的页面看起来一致);但是在类中的全局变量是不会保存到视图状态并还原的,所以在每次提交请求后数值都会丢失  
   
  以上是我的理解,不知道对不对Top

14 楼zyug(LovlyPuppy)回复于 2005-03-04 09:36:14 得分 2

但是在类中的全局变量是不会保存到视图状态并还原的,  
  这点我和你看法不同  
  asp.net的页面生存周期是很长的,你不信你可以多增加int   或是string变量的个数,viewstate的长度你可以看到明显变长了,它是靠viewstate   来维护的  
  楼主的代码哪里可能有错误,替换掉了,这点我专门试过的Top

15 楼ghx88(辉)回复于 2005-03-04 12:39:43 得分 0

多谢高见!Top

相关问题

  • 请问如何对excel宏里的全局变量赋值呢?
  • 关于全局变量的声明和赋值问题
  • 控件里的数组变量,赋值和调用的问题.
  • 变量赋值!
  • 问一个全局变量问题的取值及赋值问题?
  • 如何向另外一个已知句柄的全局变量赋值
  • 树型控件中,全局变量访问不了
  • 全局变量
  • 全局变量!!
  • 全局变量

关键词

  • asp.net
  • 页面
  • 视图
  • 数据
  • 客户
  • 变量
  • 赋值
  • 全局
  • 实例
  • 值

得分解答快速导航

  • 帖主:ghx88
  • saucer
  • noyester
  • lau_marco
  • lau_marco
  • eagle40
  • LoveCherry
  • shield0771
  • zyug

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo