2012-04-20 35 views
0

所以我有ObjectDataSource有一個更新和刪除方法與它關聯,並且DS被連接到一個gridview。當我調用的方法,我想重新填充在包含相同的數據網格中的母版頁下拉,所以我試圖調用方法如下:現在ObjectDataSource方法不能引用母版頁方法

  MyApp MasterPage = (MyApp)Page.Master; 
      MasterPage.getData(); 

,如果我做一個插入從網格(這是由RowCommand事件處理,而不是DS),這工作得很好,但通過DS我得到以下錯誤:「對象引用未設置爲對象的實例。」

我可以看到aspx中的某些字段尚未從回發中獲得,但是母版頁如何不可用於依賴它的頁面?我不應該參考它嗎?有沒有一些後門技巧呢?我知道我可以擺脫DS,但我想使用它,因爲它使分頁和排序變得如此簡單。

感謝

+0

您是否在'MasterPage.getData()'之前放置了一個斷點來驗證MasterPage爲空?如果你這樣做,並發現它不是null,你可以進入'getData()',看看是否有空引用。 – mafue 2012-04-20 16:33:50

+0

是的,masterPage爲null – Limey 2012-04-20 16:35:36

+0

當我深入研究這個問題時,它調用了方法,但是由於該方法引用了一個下拉框(它現在還不存在),所以它已經解決了。 – Limey 2012-04-20 16:54:36

回答

1

檢查在masterpage-contentpage life-cycle事件的順序。您可能可以將代碼移至主頁面訪問下拉框後觸發的事件。


編輯:替代

如果您不能移動代碼,嘗試將數據存儲在母版頁的屬性,那麼,一旦下拉已經初始化,回到掌握頁面並獲取數據。

protected object SomePropertyICreatedToStoreData {get;set;} 

void GetData() 
{ 
    // get the data (this part works already) 
    var theData = WhereTheDataComesFrom 

    // bind to dropdownlist - doesn't work, so... 
    this.SomePropertyICreatedToStoreData = theData; 
} 

...再後來

 this.MyDropDownList.DataSource = this.SomePropertyICreatedToStoreData; 
+0

是的,我可以移動到rowCommand,但是然後ObjectDataSource會冒犯,而且我真的很討厭必須編寫所有的代碼才能很好地處理我。 – Limey 2012-04-20 17:26:17

+0

@Limey,我剛剛添加的替代方案可能會起作用。如果沒有,也許你可以更新顯示你有和沒有工作的事件順序的問題。 – mafue 2012-04-20 19:31:52

+0

它不是數據是問題,它將數據添加到對象。該方法可以很好地回調數據集,但是當我嘗試將該數據綁定到母版頁中存在的下拉列表時,它尚未初始化。 – Limey 2012-04-20 19:35:53

0

您需要添加的主指令:

<%@ MasterType TypeName ="MasterPageClassName" %> 

<%@ MasterType virtualpath="~/Masters/Master1.master" %> 

http://msdn.microsoft.com/en-us/library/xxwa0ff0.aspx

更新:註釋中指出的分離的TypeName和虛擬路徑。

+0

同樣的問題。似乎只是一個不同的方式來做同樣的行動,我已經在上面。 – Limey 2012-04-20 17:25:10

+0

我很確定你需要參考。試試:<%@ MasterType TypeName =「MasterPageClassName」%> – Ulises 2012-04-20 18:16:41

+0

與以前相同的問題。你可以有TypeName或者虛擬路徑,它不會讓你擁有兩者。 – Limey 2012-04-20 18:44:48