Acara DropDownList's DipilihIndexChanged tidak menembak

196

Saya memiliki objek DropDownList di halaman web saya. Ketika saya mengkliknya dan memilih nilai yang berbeda, tidak ada yang terjadi, meskipun saya memiliki fungsi yang terhubung ke SelectedIndexChangedacara tersebut.

Pertama, kode HTML objek aktual:

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

Dan inilah fungsinya 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>");
        }
    }
}

Tidak ada Respons yang muncul, dan bagian JavaScript itu tidak pernah berjalan. Saya sudah mencoba ini pada Firefox versi 3.6 terbaru, dan juga Internet Explorer 8. Ini dilayani dari mesin Windows Server 2003 R2, menjalankan ASP.NET dengan .NET Framework versi 4.

TGP1994
sumber

Jawaban:

399

Setel AutoPostBackproperti DropDownList menjadi true.

Misalnya:

<asp:DropDownList ID="logList" runat="server" AutoPostBack="True" 
        onselectedindexchanged="itemSelected">
    </asp:DropDownList>
Vyas Dev
sumber
3
Ya, sepertinya sudah diperbaiki, terima kasih. Bisakah Anda jelaskan mengapa?
TGP1994
2
@ TGP1994: Properti AutoPostBack digunakan untuk mengatur atau mengembalikan apakah terjadi kembali otomatis atau tidak
Vyas Dev
2
Ketika saya memilih daftar dropdown, ini akan menjadi nilai pertama dari daftar
Muhamed Shafeeq
20
@MuhamedShafeeq - Jika Anda mengisi daftar dalam metode Page_Load pastikan Anda memasukkan kode if (! IsPostback). Ini akan mencegahnya memuat ulang daftar dan mengaturnya kembali ke item pertama.
DaveK
78

coba atur AutoPostBack="True"di DropDownList.

The Scrum Meister
sumber
44

Saya tahu postingnya sedikit lebih tua, tetapi saya masih ingin menambahkan sesuatu ke jawaban di atas.

Mungkin ada beberapa situasi di mana, " nilai " lebih dari satu item dalam daftar dropdown diduplikasi / sama. Jadi, pastikan Anda tidak memiliki nilai berulang dalam daftar item untuk memicu acara " onselectedindexchangeed " ini

4u.Ans
sumber
Dua dari nilai saya digandakan dan itu menyebabkannya tidak memecat acara yang dipilih secara otomatis yang dipilih meskipun postback sedang terjadi. Terima kasih untuk ini!
Mike
nilai dropdown yang dipilih tidak memiliki banyak item. harap periksa bahwa nilai bukan nol.
dinesh kumar
12

Tambahkan properti ViewStateMode="Enabled"dan EnableViewState="true" Dan AutoPostBack="true"dalam dropDownList drop

Dilip Kr Singh
sumber
properti ViewState tidak diperlukan, dan AutoPostBack disarankan dalam beberapa jawaban tahun sebelum ini.
TylerH
4

Pastikan juga halaman tersebut valid. Anda dapat memeriksa ini di alat pengembang browser (F12)

Di tab Konsol pilih Target / Bingkai yang benar dan periksa properti [Page_IsValid]

Jika halaman tidak valid, formulir tidak akan mengirimkan dan karenanya tidak memecat acara.

HerbalMart
sumber
1
Pilih untuk HerbalMart. Dalam kasus saya, halaman tersebut tidak valid tetapi karena saya menggunakan Telerik RadAjaxManager pada halaman saya, kesalahan tidak muncul ketika saya menguji di browser saya. Ketika saya berkomentar seluruh RadAjaxManager kesalahan itu muncul dengan sendirinya dan saya bisa memperbaikinya.
user2721607
Itu mungkin bermanfaat bagi orang-orang yang memiliki masalah itu, tetapi itu seperti memberi tahu orang-orang yang mobilnya tidak mau hidup ketika mereka memutar kunci "pastikan lampu depan Anda bekerja atau Anda tidak akan bisa melihat ketika mengemudi di malam hari". Dengan kata lain, ini tidak menjawab pertanyaan yang diajukan.
TylerH
3

Bagi saya jawabannya adalah atribut halaman aspx, saya menambahkan Async = "true" ke atribut halaman dan ini menyelesaikan masalah saya.

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

Ini adalah struktur dari panel pembaruan saya

<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
sumber
1

Alih-alih apa yang Anda tulis, Anda bisa menulisnya langsung di acara SelectedIndexChanged kontrol dropdownlist, misalnya

protected void ddlleavetype_SelectedIndexChanged(object sender, EventArgs e)
{
 //code goes here
}
pengguna2541273
sumber
1
Hanya jika pengaturan AutoEventWireup pada halaman aspx benar, jika tidak, Anda harus melakukannya secara manual, seperti contoh aslinya.