4

コードビハインドでドロップダウンリストを生成していますが、selectedindexchangedイベントを自動的に発生させることができません。ASPXページに直接配置すると正常に機能しますが、コードビハインドに配置する必要があります。

これは機能しません:

var deptList = new DropDownList
    {
        ID = "deptList",
        DataSource = departments,
        DataTextField = "deptname",
        DataValueField = "deptid",
        AutoPostBack = true,
        EnableViewState = true
    };

deptList.SelectedIndexChanged += new EventHandler(deptList_SelectedIndexChanged);
deptList.DataSource = departments;
deptList.DataTextField = "deptname";
deptList.DataValueField = "deptid";

if (!IsPostBack)
    deptList.DataBind();

deptList.Items.Insert(0, new ListItem("---Select Department---", string.Empty));

writer.Write("Select a department: ");
deptList.RenderControl(writer);

しかし、これは機能します:

<asp:DropDownList ID="deptList" AutoPostBack="true" runat="server" OnSelectedIndexChanged="deptList_SelectedIndexChanged"></asp:DropDownList>
4

5 に答える 5

7

問題は、コントロールをページに十分早く追加していない場合に発生する可能性があります。イベントを結び付けるには、ページのライフサイクルの早い段階でコントロールを追加する必要があります。

おそらく、手遅れのLoadイベントでそれを行っています。Initイベント中に追加するか、CreateChildControlsメソッドをオーバーライドしてみてください。

編集:Dave Swerskyが述べたように、ポストバックを含むすべてのページリクエストでこれを行うようにしてください。

于 2010-02-17T15:21:07.763 に答える
2

コードにメッシュがあります。作成、データバインディング、およびイベント呼び出しを考案してみてください。

例:

<asp:DropDownList ID="deptList" AutoPostBack="true" runat="server"></asp:DropDownList>

次に、コードビハインド(Page_Load)で:

deptList.SelectedIndexChanged += new EventHandler(deptList_SelectedIndexChanged);

if (!IsPostBack)
{
     deptList.DataTextField = "deptname";
     deptList.DataValueField = "deptid";
     deptList.DataSource = departments;
     deptList.DataBind();
     deptList.Items.Insert(0, new ListItem("---Select Department---", string.Empty));
}
于 2010-02-17T15:21:25.900 に答える
2

Mike Mooneyの答えを詳しく説明するには、すべてのポストバックでコントロールをコントロールツリーに追加し直す必要もあります。 コントロールツリーは、ポストバックごとに再作成され、マークアップから読み込まれます。プログラムで一度追加し、二度と追加しない場合、イベントを受信するためのコントロールはツリーにありません。

于 2010-02-17T15:22:57.733 に答える
0

私が抱えていた問題は、ドロップダウンリストにAutoPostBack = trueがない場合、関数を呼び出さないことでした。

于 2012-11-13T10:38:06.753 に答える
0

コントロールコレクションにコントロールを追加していないようです。コントロール階層のどこかにコントロールを追加し、イベントを受信するためのコントロールが存在することを確認するために、すべてのポストバックでコントロールが追加されるようにする必要があります。コントロールを追加することで、RenderControlを直接呼び出す必要がなくなります。

于 2010-02-17T15:33:42.007 に答える