【问题标题】:Help with dynamically added controls in .net帮助在 .net 中动态添加控件
【发布时间】:2011-01-05 15:42:30
【问题描述】:

我被困住了!如果我想利用视图状态,我了解页面生命周期以及如何在 page_init 上添加动态控件。我也知道我应该尽可能避免动态控制。动态控件的创建取决于从自定义树视图发送的自定义事件参数创建的对象。问题是我需要视图状态,所以我需要在 page_init 中创建它们,但我没有事件参数来创建对象,该对象告诉我要添加哪些控件,直到生命周期的后期。解决方案...

Private Function GetEventArgs() As npTreeViewEventArgs
    Dim control As Control = Nothing
    Dim e As npTreeViewEventArgs = Nothing
    Dim ctrlname As String = Page.Request.Params("__EVENTTARGET")
    Dim args As String = Request.Params("__EVENTARGUMENT")
    If ctrlname IsNot Nothing AndAlso ctrlname <> String.Empty Then
        control = Page.FindControl(ctrlname)
    End If
    If TypeOf control Is npTreeView AndAlso Not String.IsNullOrEmpty(args) Then
        e = New npTreeViewEventArgs(args)
    End If
    Return e
End Function

我在 page_init 中使用它来创建我的对象和控件。这对我来说感觉很肮脏。有没有其他方法可以解决这个问题?

【问题讨论】:

    标签: asp.net vb.net controls


    【解决方案1】:

    这实际上是此类问题最直接的解决方案。如果您不能在每次回发时将所有控件添加到页面并使用可见性来控制它们的外观,那么您正在做的正是我所推荐的。 (还有have recommended before。)

    当我看到人们诉诸重定向、实现自己的视图状态跟踪或进行极端的动态控制操作来解决这个问题时,我感到畏缩。它可能感觉很脏,但它比其他替代方案更易于理解和维护。

    【讨论】:

      【解决方案2】:

      是的。我这样做的方法是重载动态控件的视图状态以将其存储在它们的父视图状态中。还要重载动态控件视图状态的读取。然后您可以在页面周期的后期创建它们。

      当然,这比这要复杂一些……但你明白了。 (我会发布代码示例,但这是之前的工作,现在无法访问它们。)

      【讨论】:

        猜你喜欢
        • 2018-10-16
        • 2011-06-07
        • 2011-07-22
        • 1970-01-01
        • 2011-01-21
        • 1970-01-01
        • 2011-05-17
        • 2013-05-29
        • 2013-09-11
        相关资源
        最近更新 更多