2010-07-13 59 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()