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.

TGP1994
źródło

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>
Vyas Dev
źródło
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
78

spróbuj ustawić AutoPostBack="True"na DropDownList.

Scrum Meister
źródło
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

4u.Ans
źródło
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

Dilip Kr Singh
źródło
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.

HerbalMart
źródło
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>
Justin F.
źródło
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
}
użytkownik2541273
źródło
1
Tylko jeśli ustawienie AutoEventWireup na stronie aspx jest prawdziwe, w przeciwnym razie musisz to zrobić ręcznie, jak w oryginalnym przykładzie.