代码之家  ›  专栏  ›  技术社区  ›  Mike Florian Doyen

有关在.NET中动态添加控件的帮助

  •  1
  • Mike Florian Doyen  · 技术社区  · 15 年前

    我被卡住了!我了解页面生命周期,以及如果我想利用viewstate,我需要如何在页面初始化上添加动态控件。我也知道我应该尽可能避免动态控制。动态控件的创建取决于从自定义树视图发送的自定义事件参数创建的对象。问题是我需要viewstate,所以我需要在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
    

    我在页面初始化中使用这个来创建我的对象和控件。我觉得这很脏。还有别的办法吗?

    2 回复  |  直到 15 年前
        1
  •  2
  •   Community CDub    7 年前

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

    当我看到人们诉诸于重定向,或者实现他们自己的视图状态跟踪,或者做极端的动态控制操作来解决这个问题时,我会感到害怕。它可能感觉脏,但比其他选择更容易理解和维护。

        2
  •  0
  •   Hogan    15 年前

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

    当然,这比那更棘手…但你明白了。(我会发布代码示例,但这是以前的工作,现在无法访问它们。)