[英]Nested ASP.NET DropDownList SelectedIndexChanged Not Firing
[英]SelectedIndexChanged for DropDownList in ASP.NET firing in the wrong order
我的代码中有以下DropDownList,它们以错误的顺序触发:
public class MyWebpart : WebPart
{
private DropDownList dropDown = new DropDownList();
private string selectedValue;
public Webpart()
{
}
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
dropDown.AutoPostBack = true;
dropDown.SelectedIndexChanged += new EventHandler(DropDown_SelectedIndexChanged);
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
this.EnsureChildControls();
}
protected void DropDown_SelectedIndexChanged(Object sender, EventArgs e)
{
selectedValue - dropDown.SelectedValue;
}
protected void override void CreateChildControls()
{
base.CreateChildControls();
// create some stuff here
}
我期望下拉选择发生更改时,将首先调用DropDown_SelectedIndexChanged,但是它经历了从OnInit,OnLoad,CreateChildControls到DropDown_SelectedIndexChanged的整个生命周期。
我想念什么吗? 如何首先获得DropDown_SelectedIndexChanged调用?
您无法更改页面生命周期。 您可以执行的操作是检查Page.IsPostBack是否仅在首次加载时执行适当的操作,或者可以创建Web服务并从javascript调用该Web服务以在js中执行您选择的indexchanged动作,而不是发回整个页面。
祝好运!
这是您将要调用的方法
protected void override void CreateChildControls()
{
base.CreateChildControls();
dropDown.SelectedIndexChanged += new EventHandler(DropDown_SelectedIndexChanged);
}
无法从CreateChildControls()
访问发布回的值; 您必须等到OnLoad
事件将回发的私有视图状态加载到控件中。
在OnInt
事件中,调用OnInt
EnsureChildControls()
; 然后,可以在OnLoad
事件的控件中使用回传的值–注意:确保EnsureChildControls()
调用CreateChildControls()
。
dropDown.AutoPostBack = true;
属性触发回发,导致其经历页面生命周期事件。
最好的选择是将if(!IsPostBack) { }
至少签入OnLoad方法,以过滤掉不想在回发中发生的事件。
您可以编写一些Javascript函数并将其应用于下拉列表的'onchange'事件。 但是您需要关闭自动回发,它会发生在客户端而不是服务器上。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.