【发布时间】:2009-02-22 18:36:57
【问题描述】:
我最近在使用向其中添加动态控件的中继器时遇到了一个问题,虽然我有一个解决方法,它在功能上完全符合我的要求,但我想知道是否有更好的方法为我的理解做这件事的方法。我已经使用 ASP.NET 大约 6 个月了,每次我认为我已经完全掌握了页面生命周期/视图状态时,都会突然出现一些我无法回答的问题。
我正在创建一个表单,用户可以在其中注册他们对某个活动的兴趣,并为多个人注册。
aspx 是这样的:
<asp:Repeater ...>
<bunch of formatting and always there controls like firstname/lastname/address>
<asp:PlaceHolder ...>
<dynamic controls for workshop selection go here>
</asp:PlaceHolder>
</asp:Repeater>
一个活动可以有用户可以注册的研讨会,研讨会的可用性取决于他们选择参加活动的日期。研讨会的可用性取决于日期,因此他们在选择日期之前无法选择研讨会。
无论如何,我添加的动态控件基本上是一堆文字和一堆单选按钮组。
我首先在 ItemDataBound 事件处理程序中添加控件,但是当将我的转发器项目保存回我的委托列表时,单选按钮的 ViewState 从未更新。 ItemTemplate 中引用的所有字段都处理得很好,但不是我动态添加的单选按钮。
我尝试改用 ItemCreated 事件,在那里添加我的按钮,但这似乎没有任何区别。最后,我确定了一个基于this 的解决方法。基本上我只是以文字形式输出 HTML 输入字段并从请求中读取它们。
现在一切都很完美,我对功能很满意,只是不得不将单选按钮直接输出为 HTML 输入而不是使用服务器端控件,这似乎真的很脏。有没有人知道为什么 ViewState 没有被正确恢复?
为了清楚起见,控件每次都以相同的顺序重新创建,并正确设置了 ID。我到处都在使用动态控件,它们运行良好,但在这种情况下,当我将它们添加到中继器中时,它们无法正常工作。
//更多说明
我无法在 Page.Init 中创建这些控件,因为用户选择了导致回发的日期,我必须等待该控件的视图状态加载后才能创建动态控件。
【问题讨论】:
-
这能回答你的问题吗? Maintaining viewstate of a repeater
-
@MichaelFreidgeim 老实说,我已经很久没有处理我不知道的网络表单了!我已经多年没有在 .NET 中工作过,更不用说 Web 表单了。老实说,我现在对任何不得不使用网络表单的人的建议可能只是完全改变视图状态。
-
很抱歉自动创建了无意的问题 - 评论应该是“Possible duplicate”
-
啊 - 在这种情况下它没有,问题的流程不同,所以另一个问题的答案在这里没有帮助。