1

ご挨拶!

asp:DropDownListとasp:Buttonで構成されるシンプルなナビゲーションメニューがあります。ユーザーはドロップダウンからアイテムを選択し、ボタンをクリックして新しいURLに移動します。ドロップダウンリスト項目が選択されたときにユーザーがEnterキーを押したときに、ボタンをクリックしたかのような動作を再現できるようにサポートできるようにしたいと思います。

これが私がこれまでに持っているものです:

<asp:DropDownList ID="ddlMenu"
                  runat="server"
                  onkeypress="if ((event.which && event.which == 13) || (event.keyCode && event.keyCode == 13)) {__doPostBack('GoButton',''); return false;}" />

<asp:Button ID="btnGoButton" runat="server" onclick="GoButton_Click"/>

ボタンのクリックコードは次のとおりです。

protected void GoButton_Click(object sender, EventArgs e)
{
    string l_url = ddlMenu.SelectedItem.Value;
    Response.Redirect(l_url);
}

ただし、Enterキーを押すたびにページはポストバックしますが、ボタンのクライアントイベントハンドラーは起動しません。私は何かが足りないのですか?

4

2 に答える 2

5

デフォルトのボタンを使用して、コントロールをパネルにラップしてみましたか?私はそれがテキストボックスで機能することを知っています

<asp:Panel runat="server" id="searchPanel" DefaultButton="btnGoButton">
    <asp:DropDownList ID="ddlMenu" runat="server" />
    <asp:Button ID="btnGoButton" runat="server" onclick="GoButton_Click"/>
</asp:Panel>
于 2009-02-06T16:52:40.813 に答える
0

間違ったボタン ID を使用しています。

__doPostBack メソッドの ID は、トリガー コントロールの UniqueID である必要があります。トリガーは「GoButton」だと言っていますが、ID は「btnGoButton」です。

サーバーが「GoButton」が実際に btnGoButton であることを知る方法はありません。

また、名前マングリング (コントロールの一意の名前を保証する方法) により、UniqueID がさらに混乱する可能性があることも覚えておいてください。

代わりに、次のように記述してみてください: __doPostBack('<%# btnGoButton.UniqueID %>', '');

または分離コードに追加します。

ddlMenu.Attributes.Add("onkeypress", string.Format("__doPostBack('{0}', '');", btnGoButton.UniqueID);

于 2009-05-08T12:15:15.160 に答える