访问Dynamic控件内的属性会产生Null引用异常

时间:2010-07-13 00:09:39

标签: vb.net visual-studio-2005 asp.net-2.0

我有一个包含24种不同表格的应用。他们有一些安全选项,根据这些选项,5个不同的按钮提交,批准,第2批准,第3批准,拒绝等被禁用。

现在我设计了一个MainForm,它包含所有按钮和安全代码。我已经将eachform创建为usercontrol并根据用户想要的形式动态加载它们。我的装载效果非常好。我加载控件并将其添加到主页面的Page load事件中的占位符。

现在,当用户选择“提交”按钮时,我想在Form的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

多数民众赞成在哪里我获得了施法Null参考错误。因此,在回发后,控件不再存在于页面上。任何想法将不胜感激。

感谢。

2 个答案:

答案 0 :(得分:0)

Http协议是无状态的,因此回发后所有服务器变量都没有。

您是否尝试使用FindControl查找它,它应该存储在占位符的Viewstate中?

  

Directcast(Me.PlaceHolderForm.FindControl( “the_id_of_your_usercontrol”),   controls_BkCode).Save()

答案 1 :(得分:0)

嗨Tim,感谢您的帮助。但Findcontrol不适用于占位符。虽然我已经为占位符启用了viewstate,但是在回发后它没有控制权。

最后通过移动我的LoadControl代码解决了这个问题。如果不是回发。所以我每次都加载控件,控件中的代码负责回发的逻辑和控件的视图数据。