ListBox сохраняет опубликованное значение даже после привязки к данным - PullRequest
0 голосов
/ 08 октября 2008

Обратите внимание, что проблема, описанная ниже, является почти полной противоположностью общей проблеме «мой элемент управления показывает одно и то же значение каждый раз при загрузке страницы. 1003 * У меня есть список, который привязывается к данным в событии загрузки страницы даже при обратной передаче.

Когда удаляется обработчик события для выбранного выбранного индекса, элемент управления каким-то образом имеет опубликованное значение, даже если он уже был снова связан и не должен иметь выбранного индекса в этот момент.

Кто-нибудь знает, как это возможно?

EDIT:

Чтобы продемонстрировать, что SelectedIndex действительно сброшен, вы можете создать форму со следующей простой разметкой:

    <label for="textbox1">Original Posted Value: </label>
    <asp:TextBox runat="server" ID="textbox1" />
    <asp:DropDownList runat="server" ID="dropdown" OnSelectedIndexChanged="dropdown_SelectedIndexChanged" AutoPostBack="true" />
    <label for="textbox2">Value at point handler is hit: </label>
    <asp:TextBox runat="server" ID="textbox2" />

Со следующим кодом в .cs

        protected void Page_Load(object sender, EventArgs e)
    {
        textbox1.Text = dropdown.SelectedIndex.ToString();
        dropdown.DataSource = new string[] { "none", "A", "B", "C" };
        dropdown.DataBind();
    }
    protected void dropdown_SelectedIndexChanged(object sender, EventArgs e)
    {
        textbox2.Text = dropdown.SelectedIndex.ToString();
    }

Обратите внимание, что значение во втором текстовом поле всегда будет равно 0.

1 Ответ

1 голос
/ 10 октября 2008

Проблема здесь в том, что источник данных переназначается и привязывается при каждой загрузке страницы, включая обратную передачу. Выбранный индекс изменяется, а затем возвращается к 0. Попробуйте создать постбэки и установить источник данных только в том случае, если он не является постбэком (начальной загрузкой), например, в .cs

защищенный void Page_Load (отправитель объекта, EventArgs e)

    {
        if (Page.IsPostBack)
        {
            textbox1.Text = dropdown.SelectedIndex.ToString();
        }
        else
        {
            dropdown.DataSource = new string[] { "none", "A", "B", "C" };
            dropdown.DataBind();
        }
    }

    protected void dropdown_SelectedIndexChanged(object sender, EventArgs e)
    {
        textbox2.Text = dropdown.SelectedIndex.ToString();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...