问题如下Step1:用户在IE中点击CheckBox为选中(这些CheckBox是在Page_Load事件中动态建立的),然后PostBack到服务器Step2:ASP.NET系统在Page_Load事件前,调入各个控件的ViewState,可是这时,这些CheckBox并未建立。Step3:Page_Load事件时,CheckBox再次被动态建立,由于错过了调入ViewState,我无法知道用户选中了哪些?请问大家,我如何才能为动态建立的控件追加ViewState?
调试欢乐多
request.form["controlname"]
之前做多级下拉菜单就是这样的,上一级的选择,决定了下一级的内容。有没有LoadView的方法
{ if (!IsPostBack)
{
LoadTextBox();
}
}
public bool IsDynamicLoadControl
{
get
{
object dynamic = ViewState["IsDynamicLoadControl"];
return dynamic == null ? false : true;
}
set
{
ViewState["IsDynamicLoadControl"] = value;
}
}
protected override void LoadViewState(object savedState)
{
base.LoadViewState(savedState); if (IsDynamicLoadControl)
{
LoadTextBox();
}
} private void LoadTextBox()
{
for (int i = 0; i < 10; i++)
{
TextBox input = new TextBox();
input.ID = "input" + i.ToString();
this.form1.Controls.Add(input);
}
IsDynamicLoadControl = true;
}
你的 Strp3 错了!在Page_Load结束之后(Page_LoadCompleted也结束),asp.net会对所有通过Control.Add添加入的控件才设置ViewState,并且这些控件的客户端提交值也会设置,并且准备好随后触发相关事件。LoadViewState有两次,一次在Page_Load之前,一次在之后。两次!
这和把建立控件的语句放到OnInit里是一样的效果。我现在遇到的麻烦事情你是,要生成一个表格,这个表格有些过滤条件,过滤条件来自几个DropDownList控件,
想从DropDownList控件里取出值,必须在LoadViewState之前建立DropDownList控件,
要建立表格,必须在LoadViewState之后-这样才能取得过滤值可是表格内还有几个checkbox需要保存状态,这事情就头大了。听说,有个消息回绕什么的,会发送两遍,这个特征对解决这个问题有帮助吗?实在不行的话,只好从Request.form里硬取了。
谢谢,一语点醒梦中人
请问Page_LoadCompleted也结束后的,事件的名称是什么?
PreRender吗?
把建立控件放到Page_Load就好了,呵呵。
之前我是放到Onint一部分,放到EventHander一部分
马上给分
LoadView时从来不触发事件。第二次是在page_loadcomplete之后,接下来触发的控件的“值修改了”这一类事件(IPostbackEventHnadler.RaisePostbackEvent引发的事件)之前,默默执行的。
把建立控件放到Page_Load就好了,呵呵。