เหตุการณ์ SelectedIndexChanged ของ DropDownList ไม่ได้เริ่มทำงาน


196

ฉันมีวัตถุ DropDownList ในหน้าเว็บของฉัน เมื่อฉันคลิกที่มันและเลือกค่าที่แตกต่างกันไม่มีอะไรเกิดขึ้นแม้ว่าฉันจะมีฟังก์ชั่นต่อสายเข้ากับSelectedIndexChangedเหตุการณ์

ก่อนรหัส HTML ของวัตถุจริง:

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

และนี่คือฟังก์ชันนั้น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>");
        }
    }
}

ไม่มีการตอบกลับปรากฏขึ้นและไม่มีการเรียกใช้ส่วนของ JavaScript ฉันได้ลองใช้ Firefox เวอร์ชันล่าสุด 3.6 แล้วเช่นเดียวกับ Internet Explorer 8 นี่เป็นบริการจากเครื่อง Windows Server 2003 R2 โดยใช้ ASP.NET กับ. NET Framework เวอร์ชัน 4

คำตอบ:


399

ตั้งค่าAutoPostBackคุณสมบัติDropDownList เป็น true

เช่น:

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

3
ดูเหมือนว่าจะแก้ไขแล้วขอบคุณ คุณอธิบายได้ไหม
TGP1994

2
@ TGP1994: คุณสมบัติ AutoPostBack ใช้เพื่อตั้งค่าหรือส่งคืนว่ามีการโพสต์กลับอัตโนมัติหรือไม่
Vyas Dev

2
เมื่อเลือกรายการดรอปดาวน์ค่าแรกของรายการจะเป็นของมัน
Muhamed Shafeeq

20
@MuhamedShafeeq - หากคุณกำลังเติมรายการในเมธอด Page_Load ให้แน่ใจว่าคุณใส่โค้ดใน if (! IsPostback) วิธีนี้จะป้องกันไม่ให้โหลดซ้ำรายการและตั้งค่ากลับเป็นรายการแรก
DaveK


44

ฉันรู้ว่ามันเก่าไปหน่อยโพสต์ แต่ก็ยังต้องการเพิ่มบางสิ่งบางอย่างให้กับคำตอบข้างต้น

อาจมีบางสถานการณ์ที่ใน " ค่า " ของมากกว่าหนึ่งรายการในรายการแบบหล่นลงซ้ำ / เหมือนกัน ดังนั้นตรวจสอบให้แน่ใจว่าคุณไม่มีค่าซ้ำในรายการเพื่อเรียกใช้เหตุการณ์ " onselectedindexchanged " นี้


ค่านิยมสองอย่างของฉันซ้ำซ้อนและนั่นทำให้ไม่เกิดเหตุการณ์แบบ onselectedindexchanged แม้ว่าการโพสต์กลับจะเกิดขึ้น ขอบคุณสำหรับสิ่งนี้!
Mike

ค่าแบบเลื่อนลงที่เลือกไว้มีค่าเป็นศูนย์ในหลายรายการ กรุณาตรวจสอบในแบบสอบถามว่าค่าไม่เป็นโมฆะ
dinesh kumar

12

เพิ่มคุณสมบัติViewStateMode="Enabled"และEnableViewState="true" และAutoPostBack="true"ใน DropDownList แบบหล่น


ไม่จำเป็นต้องใช้คุณสมบัติ ViewState และแนะนำให้โพสต์ข้อความอัตโนมัติในคำตอบหลาย ๆ ปีก่อนหน้านี้
TylerH

4

ตรวจสอบให้แน่ใจด้วยว่าหน้านั้นถูกต้อง คุณสามารถตรวจสอบสิ่งนี้ได้ในเครื่องมือสำหรับนักพัฒนาเบราว์เซอร์ (F12)

ในแท็บคอนโซลเลือกเป้าหมาย / เฟรมที่ถูกต้องและตรวจสอบคุณสมบัติ [Page_IsValid]

หากหน้าไม่ถูกต้องแบบฟอร์มจะไม่ส่งและจะไม่ดำเนินการเหตุการณ์


1
โหวตให้กับ HerbalMart ในกรณีของฉันหน้าไม่ถูกต้อง แต่เนื่องจากฉันใช้ Telerik RadAjaxManager บนหน้าของฉันข้อผิดพลาดไม่แสดงเมื่อฉันทดสอบในเบราว์เซอร์ของฉัน เมื่อฉันแสดงความคิดเห็น RadAjaxManager ทั้งหมดข้อผิดพลาดแสดงตัวเองและฉันก็สามารถแก้ไขได้
user2721607

นั่นอาจเป็นประโยชน์สำหรับผู้ที่มีปัญหานั้น แต่ก็เหมือนบอกคนที่รถจะไม่เริ่มเมื่อพวกเขาเปลี่ยนคีย์ "ตรวจสอบให้แน่ใจว่าไฟหน้าของคุณทำงานหรือคุณจะไม่สามารถมองเห็นเมื่อขับรถตอนกลางคืน" ในคำอื่น ๆ นี้ไม่ตอบคำถามที่ถาม
TylerH

3

สำหรับฉันคำตอบคือแอททริบิวต์หน้า aspx ฉันเพิ่ม Async = "true" ให้กับแอททริบิวต์เพจและนี่เป็นการแก้ปัญหาของฉัน

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

นี่คือโครงสร้างของแผงการอัพเดทของฉัน

<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

แทนที่จะเขียนสิ่งที่คุณเขียนคุณสามารถเขียนได้โดยตรงในเหตุการณ์ SelectedIndexChanged ของการควบคุมรายการแบบหล่นลงเช่น

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

1
เฉพาะเมื่อการตั้งค่า AutoEventWireup บนหน้า aspx เป็นจริงมิฉะนั้นคุณต้องดำเนินการด้วยตนเองตามตัวอย่างดั้งเดิม
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.