我有一个包含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参考错误。因此,在回发后,控件不再存在于页面上。任何想法将不胜感激。
感谢。
答案 0 :(得分:0)
Http协议是无状态的,因此回发后所有服务器变量都没有。
您是否尝试使用FindControl查找它,它应该存储在占位符的Viewstate中?
Directcast(Me.PlaceHolderForm.FindControl( “the_id_of_your_usercontrol”), controls_BkCode).Save()
答案 1 :(得分:0)
嗨Tim,感谢您的帮助。但Findcontrol不适用于占位符。虽然我已经为占位符启用了viewstate,但是在回发后它没有控制权。
最后通过移动我的LoadControl代码解决了这个问题。如果不是回发。所以我每次都加载控件,控件中的代码负责回发的逻辑和控件的视图数据。