ASP.net:动态加载Web用户控件

时间:2009-01-13 21:27:00

标签: asp.net

当用户从菜单中选择一个项目时,我有一个带有占位符控件和菜单控件的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

2 个答案:

答案 0 :(得分:10)

请记住,每次进行回发时,您都在使用页面类的全新实例。如果您将控件添加到页面类的上一个实例的控件集合中,则需要为后面的每个回发再次添加它。

此外,如果您希望为控件还原ViewState,则需要在 Load事件之前将其添加到页面。这意味着在Init或PreInit期间添加控件。

答案 1 :(得分:2)

Joel是正确的,您需要在每次回发时添加控件,这样您就需要一种方法来跟踪页面上存储的控件。

Dynamic Controls Placeholder是一个出色的控件,可帮助您在回发中管理页面上的动态控件。我建议你把它检查出来,因为我已经在很多项目中使用它了,这让我的生活变得更轻松。