帮助在.net中动态添加控件

时间:2010-01-15 19:07:15

标签: asp.net vb.net controls

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

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中使用它来创建我的对象和控件。这让我觉得很脏。还有另一种方法可以解决这个问题吗?

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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

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