2

我注意到ObjectDataSource使用CacheKeyDependency的行为很奇怪

当我CacheKeyDependency在声明性 .aspx 语法中设置时,ObjectDataSource.Selecting事件(和 Selected)被调用两次!!!(当然,相关的数据库也会SelectMethod被调用两次)

但是,如果我删除Selecting Event 发生,正确,只有一次CacheKeyDependencyObjectDataSource

速度方面,如果我假设 Selecting/Selected 只被调用一次,这可能会破坏我的代码隐藏逻辑......

你们有人注意到了吗?

这种行为可能归因于 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
4

1 回答 1

1

必须设置的Cache值。CacheKeyDependency如果没有,ObjectDataSource缓存基本上被禁用,这可能导致 select 方法被调用两次。

请参阅Microsoft 文档中的示例。

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        Cache[ObjectDataSource2.CacheKeyDependency] = "CacheExample";
    }
}

发现以下方法效果最好。当页面加载不是回发时,MS 示例使缓存过期。

if (null == Cache[ObjectDataSource2.CacheKeyDependency])
{
    Cache[ObjectDataSource2.CacheKeyDependency] = new Object();
}
于 2013-04-02T21:15:57.520 回答