【问题标题】:ASP.net: dynamically load web user controlASP.net:动态加载网页用户控件
【发布时间】:2009-01-13 21:27:00
【问题描述】:

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

【问题讨论】:

    标签: asp.net


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      Dynamic Controls Placeholder 是一个出色的控件,可帮助管理跨回发页面上的动态控件。我建议您检查一下,因为我在许多项目中都使用过它,它让我的生活变得更轻松。

      【讨论】:

        猜你喜欢
        • 2010-11-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-17
        相关资源
        最近更新 更多