日期:2014-05-19  浏览次数:20402 次

关于变量作用范围的问题,请大家帮忙,谢谢。
问题如下:
在Main.aspx里,有一个MultiView控件,View1为A.ascx用户控件,View2为B.ascx用户控件。执行过程为先显示A.ascx,然后点击A.ascx里的修改按钮,执行Main.aspx里的委托事件,给B.ascx里的变量赋值,并显示B.ascx。然后点击Main.aspx里的保存按钮,保存数据并显示A.ascx。
具体代码如下:
B.ascx里:
private   string   sEditKey;
public   string   EditKey
{
set   {sEditKey   =   Value;}
get   {return   sEditKey;}
}
LoadEditDataByKey()
{
数据库PKey   =   this.EditKey;
根据PKey查找对应数据。
}
Save()
{
数据库PKey   =   this.EditKey;
根据PKey保存数据
}

A.ascx里:
private   string   sEditKey;
public   string   EditKey
{
set   {sEditKey   =   Value;}
get   {return   sEditKey;}
}
Edit()
{
this.EditKey   =   "123 ";
执行Main.aspx里的委托事件EditButtonClick()
}

Main.aspx
委托事件:
EditButtonClick()
{
B用户控件.EditKey   =   A用户控件.EditKey
LoadEditDataByKey();
显示A用户控件所在View
}

SaveButtonClick()
{
  执行B用户控件里的Save()函数。
}

出现的情况是:我点击A用户控件里的修改按钮时,能正常运行,数据库PKey   =   this.EditKey这条语句能得到PKey的值=123。
并访问数据库得到数据,显示B.aspx.可是当我接着点击Main.aspx里的保存按钮,执行B用户控件里的Save函数时,数据库PKey   =   this.EditKey这条语句得到的PKey为NULL,这是为什么?我点击修改按钮后,并没有做起他的操作,直接就进行保存,为什么sEditKey
的值就丢了呢?

请大家帮忙。谢谢!


------解决方案--------------------
MultiView
你换的时候好象不保存状态啊
比如fileupload等文件就会丢失
------解决方案--------------------
a、b都是ascx吧?因为作用域不同,所以数据会出现丢失,有两种方式可以解决:
1:a、b里面的方法都采用代理,在Main.aspx里写;
2:将a、b里的值通过session传
------解决方案--------------------
是不是状态丢失了,检查下