2010-07-13 57 views
0

我有一個應用程序與24個不同的窗體。他們有一些安全選項,基於這些選項,5個不同的按鈕提交,批准,第二批准,第三批准,拒絕等獲取啓用禁用。訪問動態控件內的屬性給出空引用異常

現在我設計了一個MainForm,其中包含所有按鈕和安全代碼。我已經創建了每個表單作爲一個用戶控件,並根據用戶想要的形式動態加載它們。我的加載工作非常好。我加載控件並將其添加到主頁面的頁面加載事件中的佔位符。

現在當用戶選擇提交按鈕時,我想調用窗體的usercontrol內的Save方法,因爲每個窗體都會有一個單獨的Save。所以當我嘗試這段代碼片段時,我得到了Null引用錯誤。請讓我知道如何解決它。

Private UCDynamic As UserControl 

然後在頁面加載事件中,我使用此代碼

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
If not Me.IsPostBack 
      UCDynamic = LoadControl("Controls/BkCode.ascx") 
      Me.PlaceHolderForm.Controls.Add(UCDynamic) 
End if 

然後在ButtonClick事件的提交我做這個

Protected Sub Save_OnClick(ByVal sender As Object, ByVal e As EventArgs) 
    Save() 
End Sub 

Sub Save() 
    CType(Me.UCDynamic, controls_BkCode).Save() 
End Sub 

那是從哪裏獲得的投空引用錯誤。因此,在發佈後控件不再存在於頁面上。任何想法將不勝感激。

謝謝。

回答

0

喜添感謝您的幫助。但Findcontrol對佔位符不起作用。儘管我已經爲佔位符啓用了viewstate,但它在post backs之後並不支持控件。

最後解決了這個問題,將我的LoadControl代碼移出如果不是回發。所以我每次都加載控件,控件內的代碼負責控件的後貼和視圖的邏輯。

0

Http協議是無狀態的,因此所有服務器變量在回發後都是沒有的。

您是否試圖用FindControl找到它,它應該存儲在佔位符的Viewstate中?

Directcast(Me.PlaceHolderForm.FindControl( 「the_id_of_your_usercontrol」), controls_BkCode).Save()