DropDownList의 SelectedIndexChanged 이벤트가 발생하지 않습니다


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의 해당 부분이 실행되지 않습니다. Internet Explorer 8은 물론 최신 3.6 버전의 Firefox에서이 기능을 사용해 보았습니다. Windows Server 2003 R2 컴퓨터에서 .NET Framework 버전 4로 ASP.NET을 실행하고 있습니다.

답변:


399

DropDownList AutoPostBack속성을 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

선택한 항목 드롭 다운 값이 여러 항목에서 null이었습니다. 값이 null이 아닌 쿼리를 확인하십시오.
dinesh kumar

12

부동산 추가 ViewStateMode="Enabled"하고 EnableViewState="true" 그리고 AutoPostBack="true"드롭을 DropDownList로


ViewState 속성은 필요하지 않으며 AutoPostBack은 여러 해 전에 제안되었습니다.
TylerH

4

또한 페이지가 유효한지 확인하십시오. 브라우저 개발자 도구 (F12)에서이를 확인할 수 있습니다.

콘솔 탭에서 올바른 대상 / 프레임을 선택하고 [Page_IsValid] 속성을 확인하십시오.

페이지가 유효하지 않으면 양식이 제출되지 않으므로 이벤트가 발생하지 않습니다.


1
HerbalMart에 투표하십시오. 내 경우에는 페이지가 유효하지 않지만 내 페이지에서 Telerik RadAjaxManager를 사용하기 때문에 브라우저에서 테스트 할 때 오류가 표시되지 않았습니다. 전체 RadAjaxManager를 주석 처리했을 때 오류가 발생하여 수정할 수있었습니다.
user2721607

그것은 그 문제를 가진 사람들에게 도움이 될 수 있지만, 열쇠를 돌 때 자동차가 시동되지 않는 사람들에게 "헤드 라이트가 작동하는지 또는 밤에 운전할 때 볼 수 없을 것"이라고 말하는 것과 같습니다. 다시 말해, 이것은 질문에 대한 답변이 아닙니다.
TylerH

2

나에게 대답은 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
aspx 페이지의 AutoEventWireup 설정이 true 인 경우에만 원본 예에 따라 수동으로 설정해야합니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.