【发布时间】:2015-12-12 03:59:33
【问题描述】:
正如标题所示,我们在回发后获取文本框的正确文本值时遇到问题。
上下文:
- 文本框名为
textbox_registration - 文本框位于动态加载的控件中。
- 动态控件会在每次回发时重新创建,并在 OnInit 事件中设置其数据。
- 动态控件位于 UpdatePanel 内的 PlaceHolder 中。
预计表单中发布的值随后将出现在文本框的Text 属性中。第一次提交表单很好,然后就变得奇怪了。 textbox_registration 的 UniqueID 在每次后续提交中都会发生变化,从而破坏了存储在 Text 属性中的预期值。下面是 Textbox 的 UniqueID 示例。
ctl00$CollapsableSidebar$panel_editAsset$ctl01$textbox_registration ctl00$CollapsableSidebar$panel_editAsset$ctl02$textbox_registration
我的理论是,当它再次加载到 init 中的动态控件时,它通过更改生成的 UniqueID 来避免与文本框的前一个实例发生冲突,然后当第二次回发发生时,ID 必须不同,从而破坏init 和 load 方法之间的 ViewState 初始化。
这很烦人,因为在 Request.Form 集合中我可以看到正确发布的值。
如何检索textbox_registration.Text 的发布值?
编辑 1: 澄清一下 textbox_registration 是我们动态加载的 UserControl 中的普通静态 ASP 文本框。
编辑 2: 为了概述该场景,源代码已被精简为以下文件:
- Item Page,显示物品的页面。
- Edit Pane,Item Page 上的自定义 UserControl,用于加载动态控件。
- Dynamic Control,加载到编辑窗格中的动态项目编辑控件的示例。
- IEditItemPanel,编辑控件必须实现的接口。
【问题讨论】:
-
解决方案是否可以将
textbox_registration(这是一个 asp:Textbox)转换为标准<input type="text" id="textbox_registration" />并使用Form.Request["textbox_registration"]来获取值?还是这会引发安全风险、不当行为等?
标签: c# asp.net c#-4.0 web webforms