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