2011-08-31 103 views
0

以下是這種情況:我的頁面上有一個動態創建的更新面板,因此我想我會編寫一個方法來處理每個方法的所有加載。爲什麼__doPostBack()不會觸發我的綁定加載事件?

Updatepanel創作看起來是這樣的:

Dim newUpdp As New UpdatePanel 
newUpdatep.ChildrenAsTriggers = False 
newUpdatep.UpdateMode = UpdatePanelUpdateMode.Conditional 
newUpdatep.ID = Guid.NewGuid.ToString 

AddHandler newUpdatep.Load, AddressOf updatep_load_method 
updatep_Holder.ContentTemplateContainer.Controls.Add(newUpdp) 
updatep_Holder.Update() 

這就造成了更新面板和結合其負載事件方法「updatep_load_method」。只要將Updatepanel插入固定器中,就會調用此方法。方法代碼如下:

Private Sub updp_load_method(sender As UpdatePanel, e As System.EventArgs) 
    Dim div As New HtmlGenericControl("div") 
    div.InnerText = Date.Time.Now.ToString 
    sender.ContentTemplateContainer.Controls.Add(div) 
    sender.Update() 
End Sub 

稍後我想更新面板,並刷新時間。所以我使用javascript __doPostBack方法。根據Dave Ward,__doPostBack方法遵循整頁回發生命週期,所以我認爲我的更新面板的加載事件將被觸發,並且「updatep_load_method」將被該特定更新面板調用...

儘管部分回發發生,並且其他更新面板的加載事件被調用,我的綁定的不是。那麼這裏發生了什麼?

+0

您是否在回覆中再次添加更新面板? – Tejs

+0

@Tejs,我想知道這是否會發生 - 就像我可能會重新創建控件,但不會再綁定它們或類似的東西。我會明天嘗試詹姆斯約翰遜的回答,看看我如何繼續。 –

回答

0

您需要在Page_Init重新創建動態控件,並必須使用相同的Id(所以你不能做一個Guid.NewGuid.ToString()而重現控制)。

否則,ASP.Net將無法找到您的控件並使用ViewState中的數據填充它。

這是一個很好的article,它解釋了更多關於動態控件的內容。

+0

謝謝@Mrchief,我一定會試試這個。對於檢索更新面板的ID,您有任何建議,以便我可以使用相同的ID重新創建?或者你會建議不要首先使用GUIDS?我使用它們的唯一原因是爲每個動態創建的面板實現獨特的ID。 –

+0

你需要以某種方式跟蹤ID。我建議你根據你可以使用的一些已知的屬性來創建它,同時重新創建。沒有進一步瞭解代碼就很難說清楚。如果可能的話,避免使用動態控件,並儘量避免使用UpdatePanel! – Mrchief

+0

我接受了關於不使用動態面板的建議 - 我發現使用某些控件預先填充頁面會更容易(因此我事先知道這些ID),然後按照您的建議在page_init期間重新綁定onload。 –

0

嘗試實施RaisePostBackEvent方法在代碼:

protected override void RaisePostBackEvent(IPostBackEventHandler source, string eventArgument) 
{ 
    //call the RaisePostBack event 
    base.RaisePostBackEvent(source, eventArgument); 

    //add whatever code you need to execute on postback here 
} 
相關問題