DropDownList'in SelectedIndexChanged etkinliği tetiklenmiyor


196

Web sayfamda bir DropDownList nesnesi var. Ona tıkladığımda ve farklı bir değer seçtiğimde, SelectedIndexChangedolaya bağlı bir fonksiyonum olsa bile hiçbir şey olmuyor .

İlk olarak, gerçek nesnenin HTML kodu:

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

Ve bu o fonksiyonu vardır 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>");
        }
    }
}

Yanıtların hiçbiri görünmez ve JavaScript'in bu kısmı hiçbir zaman çalıştırılmaz. Firefox'un en son 3.6 sürümünde ve Internet Explorer 8'de denedim. Bu, ASP.NET'i .NET Framework sürüm 4 ile çalıştıran bir Windows Server 2003 R2 makinesinden sunuluyor.

Yanıtlar:


399

DropDownList AutoPostBacközelliğini true olarak ayarlayın .

Örneğin:

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

3
Bu düzeltildi gibi görünüyor, teşekkür ederim. Nedenini açıklayabilir misin?
TGP1994

2
@ TGP1994: AutoPostBack özelliği, otomatik bir geri gönderme olup olmadığını ayarlamak veya döndürmek için kullanılır
Vyas Dev

2
Açılır listeyi seçerken, listenin ilk değerine gidiyor
Muhamed Shafeeq

20
@MuhamedShafeeq - Listeyi Page_Load yönteminde dolduruyorsanız, kodu (! IsPostback) içine aldığınızdan emin olun. Bu, listenin yeniden yüklenmesini ve ilk öğeye ayarlanmasını engelleyecektir.
DaveK


44

Biraz eski yazısını biliyorum, ama yine de yukarıdaki cevaplara bir şeyler eklemek istiyorum.

Açılır listedeki birden fazla öğenin " değer " inin çoğaltıldığı / aynı olduğu bazı durumlar olabilir . Bu nedenle, bu " onselectedindexchanged " olayını tetiklemek için liste öğelerinde tekrarlanan değer bulunmadığından emin olun


Değerlerimden ikisi çoğaltıldı ve geri gönderme gerçekleşmesine rağmen onelectedindexchanged olayını tetiklememesine neden oldu. Bunun için teşekkürler!
Mike

seçilen açılır menü değeri birçok öğede null değerine sahipti. lütfen sorguda değerin boş olmadığını kontrol edin.
dinesh kumar

12

Özellik ekle ViewStateMode="Enabled"ve EnableViewState="true" Ve AutoPostBack="true"açılan DropDownList


ViewState özelliklerine gerek yoktur ve AutoPostBack, bundan birkaç yıl önce birden çok yanıtta önerilmiştir.
TylerH

4

Ayrıca sayfanın geçerli olduğundan emin olun. Bunu tarayıcı geliştirici araçlarında (F12) kontrol edebilirsiniz.

Konsol sekmesinde doğru Hedef / Çerçeveyi seçin ve [Page_IsValid] özelliğini kontrol edin

Sayfa geçerli değilse form gönderilmez ve dolayısıyla etkinliği tetiklemez.


1
HerbalMart için oy verin. Benim durumumda sayfa geçersizdi ama sayfalarımda Telerik RadAjaxManager kullandığım için tarayıcımda test yaptığımda hata gösterilmiyordu. Tüm RadAjaxManager yorum zaman hata kendini sundu ve bunu düzeltmek mümkün.
user2721607

Bu, sorunu olan insanlar için yararlı olabilir, ancak bu, anahtarı çevirdiklerinde arabasına başlamayan insanlara "farlarınızın çalıştığından emin olun, yoksa gece sürerken göremeyeceğinizi söylemek" gibi bir şeydir. Başka bir deyişle, bu sorulan soruya cevap vermiyor.
TylerH

3

Benim için cevap aspx sayfa özniteliği oldu, ben Async = "true" sayfa öznitelikleri ekledi ve bu benim sorunum çözüldü.

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

Bu güncelleme panelimin yapısı

<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

Yazdıklarınız yerine, doğrudan açılır liste kontrolünün SelectedIndexChanged olayına yazabilirsiniz, örn.

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

1
Yalnızca aspx sayfasındaki AutoEventWireup ayarı doğruysa, orijinal örneğe göre manuel olarak yapmanız gerekir.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.