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

添加基于ViewState的动态ASP.NET用户控件-但在LoadViewState阶段之前,asp.net,vb.net,user-controls,dynamic,viewstate,Asp.net,Vb.net,User Controls,Dynamic,Viewstate,设置: 我的页面有一个下拉列表,其值是动态填充的。根据选择的项目,在运行时动态创建许多文本框。然后用户将信息填入文本框并单击提交按钮 问题: 从submit按钮回发后,我需要在Page_Init期间(LoadViewState之前)再次动态创建文本框,以便在ViewState加载后,我的button_Click事件可以保存/执行用户输入的任何操作。问题是,我无法根据下拉列表中的选择重新创建文本框,因为LoadViewState尚未“选择”下拉列表 那么,我如何从视图状态中读取,创建文本框,然后让

设置:

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

问题:

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

那么,我如何从视图状态中读取,创建文本框,然后让视图状态填充文本框,然后单击按钮将使用这些值

我尝试过的一件事是重写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
任何帮助都将不胜感激。如果需要,我可以发布更多代码

谢谢


David

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

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

您使用的是回调还是完全回发?您填充下拉值的事件是什么?它是完全回发,下拉值最初填充在单独的事件中,但随后由ViewStateSide在回发中携带。注意,这是一种解决方法,这是正确的解决方案吗?不管怎样,我都会使用它:-)@Dave:这就是ASP.NET管理页面生命周期的方式:。这种情况很不寻常,因为动态控件的状态(在加载ViewState之前创建)取决于另一个控件的ViewState(在将所有动态控件添加到控件树之后加载)。但是,是的,我会依赖这个解决方案(没有看到与您的案例相关的任何缺点);-)很好的解决方案。有时候,在viewstate使用了这么多年之后,我忘记了HTML表单模型。谢谢