製品のドロップダウンリスト、注文した製品を表示するグリッドビュー、およびドロップダウンリストからグリッドビューに選択した製品を追加するためのボタンがあります。
誰かが[新しい製品の追加]ボタンをクリックすると、サーバー側のクリックハンドラーが起動するのは一部だけで、それ以外の場合は起動しません。何が問題なのですか?
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プロパティが最後のポストバック以降に変更されていない場合は発生しません。したがって、ポストバックをトリガーする手段としては信頼できません。