是否可以执行回发并让viewstate记住以下代码中的选定值?
似乎placeholder1.controls.clear()正在删除它。
protected void Page_Load(object sender, EventArgs e)
{
bind();
}
protected void bind()
{
PlaceHolder1.Controls.Clear();
DropDownList ddl = new DropDownList() { AutoPostBack = true, ID="ddl" };
ddl.SelectedIndexChanged += new EventHandler(ddl_SelectedIndexChanged);
ddl.Items.Add("hi");
ddl.Items.Add("bye");
PlaceHolder1.Controls.Add(ddl);
}
void ddl_SelectedIndexChanged(object sender, EventArgs e)
{
bind();
}
答案 0 :(得分:1)
尝试删除PlaceHolder1.Controls.Clear();
方法,
并将Bind()
来自Page_Load
的电话移至OnInit
你将以负载视图状态和负载的方式遇到生命周期问题。在重新创建控件之前,事件触发代码已经出现
答案 1 :(得分:1)
尝试从Page_Init()调用bind()。
ViewState在Page_Init()之后但在Page_Load()之前加载,因此当您从Page_Load()调用bind()时,您在.NET尝试之后调用它,并且无法设置DropDownList的选定值。 / p>
答案 2 :(得分:1)
是否有可能让视图状态记住所选的值......?
在加载事件之前,在回发上恢复ViewState数据。如果您希望ViewState记住控件的任何,那么在加载事件之前,该控件必须也存在于页面上。
我怀疑你问题的一部分是当你选择索引更改时重新创建你的下拉列表控件,但是在那段代码中你没有设置selectedindex,因此你每次设置它时都会销毁它。
答案 3 :(得分:0)
为什么不通过将Visible设置为false来隐藏PlaceHolder?另外,当您需要动态注入内容时,请参阅Truly Understanding Dynamic Controls以了解动态控件,这远非直截了当。