Zdarzenie SelectedIndexChanged DropDownList nie uruchamia się


196

Mam obiekt DropDownList na mojej stronie internetowej. Kiedy klikam na niego i wybieram inną wartość, nic się nie dzieje, mimo że mam funkcję podłączoną do SelectedIndexChangedzdarzenia.

Po pierwsze, kod HTML rzeczywistego obiektu:

<asp:DropDownList ID="logList" runat="server" 
       onselectedindexchanged="itemSelected">
</asp:DropDownList>

I to jest ta funkcja itemSelected:

protected void itemSelected(object sender, EventArgs e)
{
    Response.Write("Getting clicked; " + sender.GetType().ToString());
    FileInfo selectedfile;
    Response.Write("<script>alert('Hello')</script>");
    foreach (FileInfo file in logs)
    {
        if (file.Name == logList.Items[logList.SelectedIndex].Text)
        {
            Response.Write("<script>alert('Hello')</script>");
        }
    }
}

Brak odpowiedzi, a ta część JavaScript nigdy nie jest uruchamiana. Próbowałem tego w najnowszej wersji Firefoksa 3.6, a także w Internet Explorerze 8. Jest on obsługiwany z komputera z systemem Windows Server 2003 R2, na którym działa ASP.NET z .NET Framework w wersji 4.

Odpowiedzi:


399

Ustaw AutoPostBackwłaściwość DropDownList na wartość true.

Na przykład:

<asp:DropDownList ID="logList" runat="server" AutoPostBack="True" 
        onselectedindexchanged="itemSelected">
    </asp:DropDownList>

3
Cóż, wydaje się, że to naprawiło, dziękuję. Czy możesz mi wytłumaczyć dlaczego?
TGP1994

2
@ TGP1994: Właściwość AutoPostBack służy do ustawiania lub zwracania informacji, czy nastąpi automatyczne automatyczne wysyłanie zwrotne
Vyas Dev

2
Kiedy wybieram listę rozwijaną, przechodzi do pierwszej wartości listy
Muhamed Shafeeq

20
@MuhamedShafeeq - Jeśli wypełniasz listę metodą Page_Load, upewnij się, że wpisałeś kod if (! IsPostback). Zapobiegnie to ponownemu załadowaniu listy i przywróceniu jej z powrotem do pierwszego elementu.
DaveK


44

Wiem, że jest to nieco starszy post, ale nadal chciałbym dodać coś do powyższych odpowiedzi.

Może wystąpić sytuacja, w której „ wartość ” więcej niż jednego elementu na liście rozwijanej jest zduplikowana / taka sama. Upewnij się więc, że nie masz powtarzających się wartości w elementach listy, aby wywołać to zdarzenie „ onselectedindexchanged


Dwie z moich wartości zostały zduplikowane, co spowodowało, że nie wywołało on wybranego wybranego wydarzenia wymienionego, nawet jeśli miało miejsce opóźnienie. Dzięki za to!
Mike

wybrana wartość listy rozwijanej miała zero w wielu elementach. proszę sprawdzić w zapytaniu, czy wartość nie jest pusta.
dinesh kumar

12

Dodaj właściwość ViewStateMode="Enabled"i EnableViewState="true" I AutoPostBack="true"w spadku DropDownList


właściwości ViewState nie są potrzebne, a AutoPostBack został zasugerowany w wielu odpowiedziach sprzed wielu lat.
TylerH

4

Upewnij się także, że strona jest poprawna. Możesz to sprawdzić w narzędziach programistycznych przeglądarek (F12)

Na karcie Konsola wybierz prawidłowy obiekt docelowy / ramkę i sprawdź właściwość [Page_IsValid]

Jeśli strona jest nieprawidłowa, formularz nie zostanie przesłany, a zatem nie uruchomi wydarzenia.


1
Do góry głosuj na HerbalMart. W moim przypadku strona była nieprawidłowa, ale ponieważ korzystam z Telerik RadAjaxManager na moich stronach, błąd nie wyświetlał się podczas testowania w przeglądarce. Kiedy skomentowałem cały program RadAjaxManager, pojawił się błąd i udało mi się go naprawić.
user2721607

Może to być pomocne dla osób mających ten problem, ale to tak, jakby powiedzieć ludziom, których samochód nie uruchomi się po przekręceniu kluczyka, „upewnij się, że reflektory działają, bo inaczej nie będziesz widzieć podczas jazdy nocą”. Innymi słowy, to nie odpowiada na zadane pytanie.
TylerH

2

Dla mnie odpowiedzią był atrybut strony aspx, dodałem Async = "true" do atrybutów strony i to rozwiązało mój problem.

<%@ Page Language="C#" MasterPageFile="~/MasterPage/Reports.Master"..... 
    AutoEventWireup="true" Async="true" %>

To jest struktura mojego panelu aktualizacji

<div>
  <asp:UpdatePanel ID="updt" runat="server">
    <ContentTemplate>

      <asp:DropDownList ID="id" runat="server" AutoPostBack="true"        onselectedindexchanged="your server side function" />

   </ContentTemplate>
  </asp:UpdatePanel>
</div>

1

Zamiast tego, co napisałeś, możesz napisać go bezpośrednio w zdarzeniu SelectedIndexChanged kontrolki listy rozwijanej, np.

protected void ddlleavetype_SelectedIndexChanged(object sender, EventArgs e)
{
 //code goes here
}

1
Tylko jeśli ustawienie AutoEventWireup na stronie aspx jest prawdziwe, w przeciwnym razie musisz to zrobić ręcznie, jak w oryginalnym przykładzie.
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.