以前,对全局的变量赋值一般都是放在PAGE_LOAD中,
比如:public CityModel city; protected void Page_Load(object sender, EventArgs e)
{
city = (CityModel)Session["City"];
}然后如果下面中的一个ObjectDataSource的Selecting再作调用比如:
protected void ObjectDataSource1_Selecting(object sender, ObjectDataSourceSelectingEventArgs e)
{
e.InputParameters["CityId"] = city.CityId;
}也倒是一直没有出过错。
不过,今天先写了一个页面。大体上也和上面差不多,不过多了一个button_onclick事件,而且这个button事件与全局变量
一点关系也都没有,并且也和databound也没有关系。一次打开页面时正常,但当按了button后 postback的时候就报错了,报错的地方是在ObjectDataSource1_Selecting说 city 为 null但明明我是在page_load中初始化的啊,而且也没有加if(!ispostback)语句。后来我单步跟踪,发现居然ObjectDataSource1_Selecting先于page_load事件,晕了!为了解决问题,我不得不把city = (CityModel)Session["City"];
放在了 void OnInit(EventArgs e)事件中。
从而才不报错了,但一直想不明白为什么,之前我一直是认为page_load是先于数据绑定的啊,请大侠们赐教!!!解开小弟中的疑惑!谢谢了!
比如:public CityModel city; protected void Page_Load(object sender, EventArgs e)
{
city = (CityModel)Session["City"];
}然后如果下面中的一个ObjectDataSource的Selecting再作调用比如:
protected void ObjectDataSource1_Selecting(object sender, ObjectDataSourceSelectingEventArgs e)
{
e.InputParameters["CityId"] = city.CityId;
}也倒是一直没有出过错。
不过,今天先写了一个页面。大体上也和上面差不多,不过多了一个button_onclick事件,而且这个button事件与全局变量
一点关系也都没有,并且也和databound也没有关系。一次打开页面时正常,但当按了button后 postback的时候就报错了,报错的地方是在ObjectDataSource1_Selecting说 city 为 null但明明我是在page_load中初始化的啊,而且也没有加if(!ispostback)语句。后来我单步跟踪,发现居然ObjectDataSource1_Selecting先于page_load事件,晕了!为了解决问题,我不得不把city = (CityModel)Session["City"];
放在了 void OnInit(EventArgs e)事件中。
从而才不报错了,但一直想不明白为什么,之前我一直是认为page_load是先于数据绑定的啊,请大侠们赐教!!!解开小弟中的疑惑!谢谢了!
------------------------------------------------------------------非也非也!第一绑定数据时,数据是从数据库去拿,你什么时候绑定数据,Selecting事件就是什么时候发生,但是一般你去bind数据的时候都是在PageLoad之后自己去做的,所以Selecting事件好像都是在PageLoad之后。
但是第二次绑定时,有时候数据是来自ViewState里面的,根据ViewState的值来还原控件的数据,还原ViewState是在LoadViewState中进行的,而LoadViewState发生在OnInit之后PageLoad之前。这样就发生你看到的情况。
ObjectDataSource的Selecting 事件后执行
单步跟踪调试,寻找错误点