当用户从菜单中选择一个项目时,我有一个带有占位符控件和菜单控件的asp.net网页。它将根据菜单项的值动态加载控件。
我已加载控件但如果我点击链接按钮或Web用户控件上的任何内容(.ascx),Web用户控件(.ascx)将消失。我不知道造成这种情况的原因。有人可以看看我的代码,看看我错过了什么?
Protected Sub Menu1_Click(ByVal sender As Object, ByVal e As EventArgs)
Select Case Me.Menu1.SelectedValue
Case "CustMasterMain"
Dim ccCustMasterMaint As UserControl = CType(Page.LoadControl("~/Controls/Franchise/CustMasterMaintControl.ascx"), UserControl)
Me.phHolder1.Controls.Add(ccCustMasterMaint)
Case "AcctRecInq"
Dim ccAcctRecInq As UserControl = CType(Page.LoadControl("~/Controls/Franchise/custAccountsReceivableInquiry.ascx"), UserControl)
Me.phHolder1.Controls.Add(ccAcctRecInq)
End Select
End Sub
答案 0 :(得分:10)
请记住,每次进行回发时,您都在使用页面类的全新实例。如果您将控件添加到页面类的上一个实例的控件集合中,则需要为后面的每个回发再次添加它。
此外,如果您希望为控件还原ViewState,则需要在 Load事件之前将其添加到页面。这意味着在Init或PreInit期间添加控件。
答案 1 :(得分:2)
Joel是正确的,您需要在每次回发时添加控件,这样您就需要一种方法来跟踪页面上存储的控件。
Dynamic Controls Placeholder是一个出色的控件,可帮助您在回发中管理页面上的动态控件。我建议你把它检查出来,因为我已经在很多项目中使用它了,这让我的生活变得更轻松。