该不该使用数据源控件——数据源控件与页面生命周期
2009-12-20 16:05
267 查看
微软推荐使用DataSource控件,并使用DataSourceID指定数据源控件(似乎也未说明理由,至少我没有看到过)。但很多人并不认同,我一直感觉DataSource控件是一个“黑箱”。
除了ObjectDataSource不够灵活,使用反射,对性能会有所损耗外,我想它还存在下面的这个问题。
我以前曾在csdn上问过这个问题:数据源控件读入数据和数据绑定发生在页面事件的哪一个阶段 ,但答案不是很令我满意。
今天我进行了一些测试,并归纳如下,如有缪误,还望各位指出。
1、数据源控件的绑定应分“页面初次(Raw)加载” 和“页面回发(postback)”两种情况讨论。
2、在页面初次加载时,数据源绑定应发生在PreRender之后,Render之前。通过设置断点或开启Trace功能可以推断出来。
aspx 代码:
代码public class DataManager
{
static List<User> users = new List<User>{
new User{ID=1,Name="tanye"},
new User{ID=2,Name="chenjuan"}
};
public static List<User> GetUsers()
{
return users;
}
public static void AddUser()
{
users.Add(new User { ID = 3, Name = "tanchao" });
}
}
3、问题的重点在于当页面被PostBack时。我们难免产生这些疑问:
3.1 页面还会再次从数据源中读取数据么?
3.2 应该不会!不然就太傻了。测试的结果也的确如此。那DropDownList1的状态时如何得以维护的呢?
3.3 肯定是通过ViewState,我想。如何证明呢?可以禁掉ViewState试试看!
3.4 果然,当ViewState=“false”之后,程序就不得不又运行到GetUsers()方法,来获取数据。(注意:和页面初次加载取值不同,这一次获取数据发生在Init之后,Load之前)
但这究竟是如何实现的呢?ASP.NET是在何时进行ViewState的判断,并进入不同的分支的呢?事实上,我不知道。。。我仅仅知道以下几个方法:
· LoadViewState() //获取ViewState
· ProcessPostData() //对ViewState进行处理
· GetView() //ObjectDataSource的方法
还望高手指点!
4、然后,如果我们在btn_Click()方法,再加上修改数据源的代码,这必然进行再一次的绑定!似乎在性能上有稍许损耗,如果不使用DataSourceID,而直接使用DataSource的话,我们能进行更精确的控制,不是吗?
(未完,先发布,待修改)
除了ObjectDataSource不够灵活,使用反射,对性能会有所损耗外,我想它还存在下面的这个问题。
我以前曾在csdn上问过这个问题:数据源控件读入数据和数据绑定发生在页面事件的哪一个阶段 ,但答案不是很令我满意。
今天我进行了一些测试,并归纳如下,如有缪误,还望各位指出。
1、数据源控件的绑定应分“页面初次(Raw)加载” 和“页面回发(postback)”两种情况讨论。
2、在页面初次加载时,数据源绑定应发生在PreRender之后,Render之前。通过设置断点或开启Trace功能可以推断出来。
aspx 代码:
代码public class DataManager
{
static List<User> users = new List<User>{
new User{ID=1,Name="tanye"},
new User{ID=2,Name="chenjuan"}
};
public static List<User> GetUsers()
{
return users;
}
public static void AddUser()
{
users.Add(new User { ID = 3, Name = "tanchao" });
}
}
3、问题的重点在于当页面被PostBack时。我们难免产生这些疑问:
3.1 页面还会再次从数据源中读取数据么?
3.2 应该不会!不然就太傻了。测试的结果也的确如此。那DropDownList1的状态时如何得以维护的呢?
3.3 肯定是通过ViewState,我想。如何证明呢?可以禁掉ViewState试试看!
3.4 果然,当ViewState=“false”之后,程序就不得不又运行到GetUsers()方法,来获取数据。(注意:和页面初次加载取值不同,这一次获取数据发生在Init之后,Load之前)
但这究竟是如何实现的呢?ASP.NET是在何时进行ViewState的判断,并进入不同的分支的呢?事实上,我不知道。。。我仅仅知道以下几个方法:
· LoadViewState() //获取ViewState
· ProcessPostData() //对ViewState进行处理
· GetView() //ObjectDataSource的方法
还望高手指点!
4、然后,如果我们在btn_Click()方法,再加上修改数据源的代码,这必然进行再一次的绑定!似乎在性能上有稍许损耗,如果不使用DataSourceID,而直接使用DataSource的话,我们能进行更精确的控制,不是吗?
(未完,先发布,待修改)
相关文章推荐
- 谨慎在页面生命周期里使用全局静态变量
- 使用Response.Write实现在页面的生命周期中前后台的交互
- ASP.NET使用动态加载控件,注意页面生命周期
- 微信小程序自学第二课:app及页面的生命周期、使用setData绑定数据
- 使用easyui layout 布局的时候部分页面遮住的解决办法
- 使用javascript选中页面表格中的某一行,并且取值
- 使用Jsoup 抓取页面的数据
- Android中使用ViewPager和PagerTabStrip实现页面滑动效果
- 使用block闭包是实现两个页面间的反向传值
- Barcode Professional for ASP.NET使用教程:HTML页面显示条码
- master子页面中使用javascript
- block在页面逻辑处理上的使用,替换代理的功能
- 使用JS实现倒计时(在页面上动态的显示)
- 使用Flexible实现手淘H5页面的终端适配--大漠
- 使用PreviousPage来获取前一页页面的元素
- 【Android UI设计与开发】使用ViewPager实现欢迎引导页面
- 使用正则表达式验证登录页面输入是否符合要求
- 使用filter导致服务器返回的页面始终是空白---在doFilter中漏写了chain.doFilter()
- (转)教你记住ASP.NET WebForm页面的生命周期