2012-10-24 51 views
2

我已經注意到與使用ObjectDataSourceCacheKeyDependencyObjectDataSource控件和CacheKeyDependency可能的錯誤

當我設置在聲明的.aspx語法CacheKeyDependency,則ObjectDataSource.Selecting事件(選擇)一個相當奇怪的行爲被調用兩次 ! (當然也是相關的數據庫SelectMethod被調用兩次)

但是,如果我刪除CacheKeyDependencyObjectDataSource選擇事件發生時,正確,只有一次!

速度就分開,這可能會打破我的代碼隱藏的邏輯,如果我認爲選擇/ 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 

回答

1

CacheKeyDependencyCache值必須設置。否則,ObjectDataSource緩存基本上被禁用,這可能導致select方法被調用兩次。

請參閱Microsoft documentation中的示例。

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(); 
}