1

製品のドロップダウンリスト、注文した製品を表示するグリッドビュー、およびドロップダウンリストからグリッドビューに選択した製品を追加するためのボタンがあります。

誰かが[新しい製品の追加]ボタンをクリックすると、サーバー側のクリックハンドラーが起動するのは一部だけで、それ以外の場合は起動しません。何が問題なのですか?

    private void AddNewProductToGridView()
    {
        if (lstProducts.SelectedIndex < 0) return;

        Response.Write("Selected Index: " + lstProducts.SelectedValue + 
            "<br />Selected Text: " + lstProducts.SelectedItem.Text + 
            "<br />Selected Value: " + lstProducts.SelectedValue);
    }

    protected void btnAddProduct_Click(object sender, EventArgs e)
    {
        AddNewProductToGridView();
    }

更新 OK、質問を投稿した直後に、ボタンのサーバー側クリックイベントが毎回正常に起動し始めました。:D

ただし、別の問題があります。数量のテキストボックスもあります。そのボタンをページのデフォルトボタンとして機能させたい。つまり、ユーザーが数量を入力してEnterキーを押したときに、同じサーバー側のメソッドAddNewProductToGridViewを呼び出す必要があります。

そこで、テキストボックスのAutoPostBackプロパティをに設定しTrue、テキストボックスのテキスト変更イベントのイベントハンドラーを次のように追加しました。

    protected void txtQuantity_TextChanged(object sender, EventArgs e)
    {
        AddNewProductToGridView();
    }

これについては、アプリケーションを初めて起動するときを除いて、このイベントハンドラーが起動しないことを確信しています。

後の更新

私は自分の問題の解決策を見つけ、何か新しいことを学んだと思います。

TextBoxサーバー側コントロールのText_Changedイベントは、その名前が示すように、TextBoxのTextプロパティが最後のポストバック以降に変更されていない場合は発生しません。したがって、ポストバックをトリガーする手段としては信頼できません。

4

2 に答える 2

1

数量のテキストボックスもあります。そのボタンをページのデフォルトのボタンとして機能させたい

<form>最終的にフォームを送信する「最終」ボタンではなく、このボタンになるようにデフォルトのボタンを指定するだけです(存在する場合)。

<form defaultbutton="btnAddProduct">
  ...
</form>

TextBoxただし、Enter キーを押したときにどの、またはその他の入力が送信を引き起こすかについて、ここでは差別はありません。

于 2012-09-23T13:01:42.580 に答える
0

Enterキーでテキストボックスの変更を送信したい場合は、単に使用でき<form>、ボタンは送信ボタンになります。デフォルトでは、Enter キーを押すと送信されます。

于 2012-09-23T12:54:37.167 に答える