添加动态ASP.NET用户控件基于ViewState - BUT在LoadViewState阶段之前

时间:2011-01-27 02:50:32

标签: asp.net vb.net user-controls dynamic viewstate

设定:

我的页面有一个下拉列表,其值会动态填充。根据选择的项目,在运行时动态创建多个TextBox。用户然后将信息填入文本框并单击提交按钮。

问题:

从提交按钮回发后,我需要在Page_Init(BEFORE LoadViewState)期间再次动态创建TextBox,以便在加载ViewState之后,我的Button_Click事件可以保存/执行用户输入的任何操作。问题是,我无法根据下拉列表中的选择重新创建文本框,因为LoadViewState尚未“选择”下拉列表。

那么,如何从视图状态读取,创建我的文本框,然后让视图状态填充文本框,然后Button_Click将使用值?

我尝试过的一件事是覆盖LoadViewState函数,以便我可以从视图状态读取,创建框,然后再次加载视图状态。这不起作用,因为调试器似乎永远不会触及我的重写函数。

    Protected Overrides Sub LoadViewState(ByVal savedState As Object)

        MyBase.LoadViewState(savedState)

        //'Do something like add controls
        Dim test As String = RecordList.SelectedValue
        //'Create controls using value "Test"

        MyBase.LoadViewState(savedState)

    End Sub

任何帮助将不胜感激。如果需要,我可以发布更多代码。

谢谢,

大卫

1 个答案:

答案 0 :(得分:1)

我建议直接使用UniqueID属性从请求中检索下拉列表值:

Protected Sub Page_Init(ByVal sender As Object, ByVal e As EventArgs)
    Dim selectedValue As String = Request.Form(RecordList.UniqueID)
    ' Recreate your dynamic controls based on the selected value
End Sub

Protected Sub Button_Click(ByVal sender As Object, ByVal e As EventArgs)
    ' Examine dynamic controls and their values (retireved from the ViewState)
End Sub