繁体   English   中英

ASP.NET中DropDownList的SelectedIndexChanged以错误的顺序触发

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM