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.

Jawaban:


399

Setel AutoPostBackproperti DropDownList menjadi true.

Misalnya:

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

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


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


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


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.


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>

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
}

1
Hanya jika pengaturan AutoEventWireup pada halaman aspx benar, jika tidak, Anda harus melakukannya secara manual, seperti contoh aslinya.
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.