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 ???????
}}
为什么会这样????
{
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 ???????
}}
为什么会这样????
2. make sure i=100 is not inside if (!IsPostBack)
记得新建立每个新页面的时候,最先做的事情就是加
if not me.ispostbackend if
但现在的private是不行的
搂住大概是从winform转过来的。在winform中使用没有赋值的变量是不能通过编译的,但在webform中系统是不做检查的。
再看看我的问题吧:)
在WEB中类的实例并不像WINDOWS中一样NEW了以后就可以一直使用,WEB页面是在每次客户请求时重新实例化类的新实例,这个实例在完成此次请求并把需要的数据发送回客户端后就释放了,下一次请求又会生成新的实例处理数据;因为是每次请求都生成新的实例,系统会用视图状态来保存一些客户端设置值和属性来填充新实例保证操作过程的连贯(确保不丢失页面数据,使两次请求后的页面看起来一致);但是在类中的全局变量是不会保存到视图状态并还原的,所以在每次提交请求后数值都会丢失以上是我的理解,不知道对不对
这点我和你看法不同
asp.net的页面生存周期是很长的,你不信你可以多增加int 或是string变量的个数,viewstate的长度你可以看到明显变长了,它是靠viewstate 来维护的
楼主的代码哪里可能有错误,替换掉了,这点我专门试过的