DropDownListのSelectedIndexChangedイベントが発生しない


196

Webページに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で試しました。これは、.NET Frameworkバージョン4でASP.NETを実行しているWindows Server 2003 R2マシンから提供されています。

回答:


399

DropDownList AutoPostBackプロパティをtrueに設定します。

例えば:

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

3
まあ、それはそれを修正したようです、ありがとう。理由を説明できますか?
TGP1994、2011

2
@ TGP1994:AutoPostBackプロパティを使用して、自動ポストバックが発生するかどうかを設定または返す
Vyas Dev

2
ドロップダウンリストを選択すると、リストの最初の値に移動します
Muhamed Shafeeq 2012

20
@MuhamedShafeeq-Page_Loadメソッドでリストを生成している場合は、コードをif(!IsPostback)でラップするようにしてください。これにより、リストがリロードされて最初のアイテムに戻されなくなります。
DaveK 2014年


44

私はその少し古い投稿を知っていますが、それでも上記の答えに何かを追加したいと思います。

ドロップダウンリストの複数の項目の「」が重複する/同じである場合があります。したがって、この「onselectedindexchanged」イベントをトリガーするためにリストアイテムに繰り返し値がないことを確認してください


私の値の2つが重複していたため、ポストバックが発生しているにもかかわらず、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 2017

それはその問題を抱えている人々に役立つかもしれませんが、それは彼らがキーを回したときに車が始動しない人々に「ヘッドライトが機能するか、夜間運転しているときに見えないことを確認する」ように伝えるようなものです。言い換えれば、これは尋ねられている質問に答えるものではありません。
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
aspxページのAutoEventWireup設定がtrueの場合のみ、それ以外の場合は、元の例に従って手動で行う必要があります。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.