page_load 事件与 ObjectDataSource的Selecting 事件倒底谁先执行?

norron 2009-06-29 12:46:59
以前,对全局的变量赋值一般都是放在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是先于数据绑定的啊,

请大侠们赐教!!!解开小弟中的疑惑!谢谢了!



...全文
144 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
leixian929 2010-06-12
  • 打赏
  • 举报
回复
应该是ObjectDataSource的Selecting 事件先执行,我之前做了一个查询页面,想在第一次用户没有输入查询条件时不查询后台数据,打算在Page_Load里面,结果未成功
小潴 2010-05-27
  • 打赏
  • 举报
回复
ObjectDataSource的Selecting 事件先执行
zsuswy 2009-07-01
  • 打赏
  • 举报
回复
?????????????
gongsun 2009-06-29
  • 打赏
  • 举报
回复
...
微工程 2009-06-29
  • 打赏
  • 举报
回复
page_load 事件先执行
ObjectDataSource的Selecting 事件后执行
单步跟踪调试,寻找错误点
shenweiblue 2009-06-29
  • 打赏
  • 举报
回复
ding
LYH_OHYES 2009-06-29
  • 打赏
  • 举报
回复
樓上正解
zsuswy 2009-06-29
  • 打赏
  • 举报
回复
我上面说的第二次绑定,是指页面回发的时候。
zsuswy 2009-06-29
  • 打赏
  • 举报
回复
但一直想不明白为什么,之前我一直是认为page_load是先于数据绑定的啊,
------------------------------------------------------------------

非也非也!

第一绑定数据时,数据是从数据库去拿,你什么时候绑定数据,Selecting事件就是什么时候发生,但是一般你去bind数据的时候都是在PageLoad之后自己去做的,所以Selecting事件好像都是在PageLoad之后。
但是第二次绑定时,有时候数据是来自ViewState里面的,根据ViewState的值来还原控件的数据,还原ViewState是在LoadViewState中进行的,而LoadViewState发生在OnInit之后PageLoad之前。这样就发生你看到的情况。
snoopy83101 2009-06-29
  • 打赏
  • 举报
回复
如果你不用objdatesourse来绑定数据还会这样么?

62,266

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧