SelectedIndexChanged для DropDownList в ASP.NET стрельбы в неправильном порядке - PullRequest
0 голосов
/ 26 августа 2010

В моем коде есть следующий 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 первым?

Ответы [ 4 ]

4 голосов
/ 26 августа 2010

Вы не можете изменить жизненный цикл страницы.Что вы можете сделать, это либо проверить, есть ли Page.IsPostBack, и сделать что-то подходящее только при первой загрузке, ИЛИ вы можете создать веб-сервис и вызывать этот веб-сервис из javascript для выполнения выбранных вами операций с индексом в js, а не отправлять обратно всю страницу.1002 * Удачи!

1 голос
/ 02 июля 2013

Это вы будете называть методом

protected void override void CreateChildControls()
{
    base.CreateChildControls();
    dropDown.SelectedIndexChanged += new EventHandler(DropDown_SelectedIndexChanged);
}
0 голосов
/ 22 августа 2012

Отложенные значения недоступны из CreateChildControls(); вы должны подождать, пока событие OnLoad не отправит отправленное обратно приватное состояние просмотра в элементы управления.

В вызове события OnInt EnsureChildControls(); В этом случае отозванные значения доступны в элементах управления в событии OnLoad - примечание: EnsureChildControls() вызывает CreateChildControls().

0 голосов
/ 26 августа 2010

Свойство dropDown.AutoPostBack = true; запускает обратную передачу, которая заставляет его проходить через события жизненного цикла страницы.

Лучше всего поставить if(!IsPostBack) { }, по крайней мере, на метод OnLoad, чтобы отфильтровать события, которые не должны происходить при обратной передаче.

Вы можете написать некоторую функцию Javascript и применить ее к событию 'onchange' выпадающего списка. Но вам нужно отключить автоответчик, и это произойдет на стороне клиента, а не на сервере.

...