2009-02-17 2 views
1

У меня есть UpdatePanel с двумя ListBoxes в них. Я хочу, чтобы, когда страница загружает первый ListBox заполняет некоторые данные. Когда пользователь выбирает и элемент, второй ListBox должен быть заполнен соответствующими данными.AJAX.NET и ListBoxes

Вот что происходит, первый ListBox заполняется данными, пользователь выбирает элемент, а событие SelectedIndexChanged срабатывает, но выбор очищается, прежде чем метод сможет увидеть, какой элемент был выбран?

<asp:UpdatePanel ID="UpdatePanel2" runat="server"> 
<ContentTemplate> 
    <table class="listBoxTable"> 
     <thead> 
      <tr> 
       <th> 
        Please select a magazine to add articles to.</th> 
      </tr> 
     </thead> 
     <tr> 
      <td>      
       <asp:ListBox ID="lbMagazines" runat="server" Height="300px" Width="250px" 
        onselectedindexchanged="lbMagazines_SelectedIndexChanged" DataTextField="Title" 
        DataValueField="Id" AutoPostBack="True"> 

       </asp:ListBox> 
      </td> 
      <td>      
       <asp:ListBox ID="lbIssues" runat="server" Height="300px" Width="250px" 
        Enabled="False" DataTextField="Title" DataValueField="Id"> 

       </asp:ListBox> 
      </td> 
     </tr> 
    </table> 
</ContentTemplate> 
</asp:UpdatePanel> 
+0

Можете ли вы предоставить код, который вы используете для заполнения списков, обработать выбранныеindexchanged и page_load? – achinda99

ответ

1

На основании предоставленной информации, мои первоначальные мысли, что вы заселив lbMagazines на странице загрузки, так что к тому времени, он получает в случае, SelectedItem/индекс очищается.

+0

Ничего себе, что новичок ошибка. Я не думал, что событие Page_load будет срабатывать по обратным вызовам AJAX. Огромное спасибо. – jhunter

+0

Что-то довольно опрятно, что рядом со всем работает, как если бы его обратная передача, даже если его аякс-вызов. Тем не менее, только элементы управления на панели обновления будут обновляться (если вы не используете javascript). – achinda99

3

Если содержание только во второй ListBox должно измениться, то это было бы более уместно поставить первый ListBox вне UpdatePanel и использование триггеров свойства:

<Triggers> 
    <asp:AsyncPostBackTrigger ControlID="lbMagazines" EventName="OnSelectedIndexChanged" /> 
</Triggers> 

Таким образом, только будет обновлен второй ListBox, когда вам выполните обратную передачу AJAX.

+0

Использует триггеры более эффективно или имеет оба элемента управления в шаблоне контента? Я никогда не был в этом уверен. – achinda99

+0

Использование триггеров более эффективно, потому что будет обновляться только часть вашей страницы, находящаяся внутри UpdatePanel, поэтому чем меньше элементов управления, чем меньше, чем меньше данных, будут обмениваться между клиентом и сервером. –

2

Похоже, что ваш исходный код привязки списков не завернут в страницу page.IsPostBack.

If (!Page.IsPostBack) 
{ 
    //List bind code 
} 

Если это так, то первоначальный список будет продолжать восстанавливаться, как вы видите.