我正在基于数据库中的数据向页面添加动态控件以生成RadioButtonList问题。
有时问题是必需的,在这种情况下,从数据库中检索数据并填充RadioButtonList后,我会为RadioButtonList动态添加RequiredFieldValidator。
问题出现在回发上,当我在Page_Load()中执行Page.Validate()时总是失败。我发现这是因为控件在回发后重新添加,但它们不会被用户的回复重新填充。
我的问题是:
一旦点击“提交”,我何时可以获取用户的响应,我在哪里存储它,以及将其恢复的最佳方式是什么,以便Page.Validate()通过正确的响应来验证控件?
答案 0 :(得分:3)
而不是在Page_Load(或在page_Load中调用的函数中)中创建验证控件,而不是在Page_Init中执行此操作
有关详细信息,请参阅Page Lifecycle:
在页面生命周期中,将其放在Page_Init中允许在每个页面加载时创建控件,但是在应用视图状态值之前。这意味着创建了控件,然后应用了用户选择。
如果在Page_Load中有它,则在应用Viewstate值之后创建控件。这意味着控件只是在应用了视图状态后从头开始创建,将所有内容重置为默认值。
实际上,this page说得更好:
在页面初始化期间,页面上的控件可用 设置每个控件的UniqueID属性。任何主题也适用 到页面。如果当前请求是回发,则返回数据 尚未加载并且尚未控制属性值 从视图状态恢复到值。
在加载期间,如果是当前的 请求是回发,控件属性加载信息 从视图状态和控制状态恢复。
- 当你使用Page_Init 必须动态创建控件。每次创建控件 页面运行的时间。最好的地方是在 Page_Init功能。