ASP.Net: проблема с вызывающей последовательностью события изменения текста текстового поля - PullRequest
2 голосов
/ 01 февраля 2011

Я поместил список и текстовое поле с событиями Выбранный индекс изменен и Текст изменен соответственно на странице aspx.Теперь, если я что-то напишу в текстовом поле, а затем, не щелкая в другом месте, выберу значение в поле списка, то сначала вызывается событие Text Changed текстового поля, затем вызывается выбранное событие Index Change события списка.После этого снова событие Text Change текстового поля называется .Может ли какой-либо орган дать некоторое представление о том, почему это происходит?

Ниже приведена разметка:

<asp:ListBox ID="ListBox1" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ListBox_IndexChanged">
    <asp:ListItem Text="abc" />
    <asp:ListItem Text="def" />
</asp:ListBox>
<asp:TextBox ID="TextBox1" runat="server" AutoPostBack="true" OnTextChanged="Text_Changed" />

Код:

namespace WebApplication1
{
    public partial class _Default : System.Web.UI.Page
    {               
        protected void ListBox_IndexChanged(object sender, EventArgs e)
        {

        }

        protected void Text_Changed(object sender, EventArgs e)
        {

        }
    }
}

Ответы [ 2 ]

1 голос
/ 22 марта 2011

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

Когда я пробую ваш код, например, в Google Chrome , происходит следующая последовательность событий:

  1. Запрос отправлен на сервер
    1. Событие ListBox_IndexChanged вызывается
    2. Событие Text_Changed вызывается
  2. Ответ возвращается клиенту

Однако в Internet Explorer 8 я заметил следующую последовательность:

  1. Запрос отправлен на сервер
    1. Событие Text_Changed вызывается
  2. Ответ возвращается клиенту
  3. Еще один запрос отправлен на сервер
    1. Событие ListBox_IndexChanged вызывается
    2. Событие Text_Changed вызывается
  4. Второй ответ возвращается клиенту

Это не ошибка ASP.NET, а просто разные реализации JavaScript в разных браузерах.

Если вам нужно полагаться на определенную последовательность событий, AutoPostBack не собирается ее сокращать. В зависимости от вашей ситуации, я мог бы взглянуть на реализацию моих собственных событий JavaScript с использованием кросс-браузерной библиотеки, такой как jQuery . Вы можете программно перезвонить на сервер, используя функцию __doPostBack().

0 голосов
/ 01 февраля 2011

При выборе нового элемента текст в текстовой части списка заменяется текстом элемента.Вот почему вы получаете второе событие TextChanged.

...