ASP.NET События страницы вызываются дважды

#asp.net

#asp.net

Вопрос:

У меня есть код на одной из моих страниц, который приведен ниже:

 <asp:button id="btnTest" runat="server" onclick="btnTest_click" />
<div class="TomasForm">
        <ul>
            <li>
                <asp:Label ID="LineL" runat="server" AssociatedControlID="Lines" Text="<%$ FieldLabelResources:Units, Line, false %>" />
                <asp:DropDownList ID="Lines" runat="server" AutoPostBack="true" AppendDataBoundItems="true"
                    DataTextField="Name" DataValueField="Id" OnSelectedIndexChanged="Lines_SelectedIndexChanged">
                    <asp:ListItem Text="<%$ Resources:Common, SelectOne %>" Value="-1" />
                </asp:DropDownList >
            </li>
        </ul>
    </div>
  

Моя проблема в том, что когда я меняю значение выпадающего списка Lines, страница (события page_load и Lines_SelectedIndexChanged) вызывается дважды.
Страница ведет себя нормально, когда я нажимаю кнопку btnTest.

Может ли кто-нибудь сообщить мне, почему это происходит??

Спасибо, Махеш

Комментарии:

1. Не могли бы вы, пожалуйста, предоставить код..

2. Возможно, вы захотите вставить код из вашего обработчика событий SelectedIndexChanged.

3. Если вы установите выбранное значение в обработчике событий загрузки страницы (или другом событии жизненного цикла), то измененное событие будет запущено снова.

Ответ №1:

Вам нужно изменить значение AutoPostBack на False в вашем выпадающем списке.

Комментарии:

1. но если OP хочет, чтобы страница выполняла обратную отправку при изменении выпадающего списка (что нормально), она не должна запускать события страницы дважды…

Ответ №2:

Вы должны установить значение AutoPostBack равным false для выпадающего списка и в коде, убедитесь, что вы записали условие, подобное этому, в Page_Load if (!IsPostBack()) { // Напишите свой код, он сработает только один раз }

Комментарии:

1. Но я хочу выполнить обратную отправку при изменении значения выпадающего списка.

2. Это код обратной отправки, который я использую: защищенная пустая загрузка страницы (отправитель объекта, EventArgs e) { if (!IsPostBack) { Строки. Источник данных = TomasContext.Current. GetTubeLines(); Строки. DataBind(); } }