我注意到ObjectDataSource
使用 CacheKeyDependency
当我在声明性.aspx语法中设置CacheKeyDependency
时,ObjectDataSource.Selecting
事件(和选定的)被称为两次!
(当然,相关的数据库SelectMethod
也会被调用两次)
但是,如果我删除了CacheKeyDependency
,ObjectDataSource
选择事件正确,只发生一次!
速度相关,如果我假设选择/选择只被调用一次,这可能会破坏我的代码隐藏逻辑...
有人注意到了吗?
这种行为可能归因于ASP.NET中的错误,或者我的代码中可能存在一些错误?
PS:事件的时间表是这样的,粗体是重复的:
PageLoad
ODS_Selecting
DataLayer Select
ODS_Selected
ODS_Filtering
GridView_DataBound
**ODS_Selecting**
**DataLayer Select**
**ODS_Selected**
ODS_Filtering
GridView_DataBound
GridView_PreRender
答案 0 :(得分:1)
必须设置Cache
的{{1}}值。如果没有,CacheKeyDependency
缓存基本上被禁用,这可能导致select方法被调用两次。
请参阅Microsoft documentation中的示例。
ObjectDataSource
找到以下最佳方法。当页面加载不是回发时,MS示例将使缓存失效。
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Cache[ObjectDataSource2.CacheKeyDependency] = "CacheExample";
}
}