シンプルなデータグリッドがあります。各行にはチェックボックスがあります。チェックボックスは autopostback に設定されており、コード ビハインドにはチェックボックスの check-changed イベントのイベント ハンドラーがあります。これはすべて期待どおりに機能し、複雑なことは何もありません。
ただし、チェックボックスがチェックされたらすぐにチェックボックスを無効にして、二重送信を防ぐ必要があります。つまり、チェックボックスがチェックされ、すべてのチェックボックスがクライアント側の JavaScript を介して無効になり、フォームが送信されます。
これを実現するために、次のように onclick イベントにいくつかのコードを挿入しています (アラートはテスト用であることに注意してください!)。
Protected Sub DgAccounts_ItemCreated(ByVal sender As System.Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles DgAccounts.ItemCreated
If e.Item.ItemType = ListItemType.Item Or e.Item.ItemType = ListItemType.AlternatingItem Then
Dim chk As CheckBox = CType(e.Item.FindControl("chkItemChecked"), CheckBox)
chk.Attributes.Add("onclick", "alert('fired ...');DisableAllDataGridCheckBoxes();")
End If
End Sub
レンダリングされたページのソースを調べると、次のようになります。
<input id="DgAccounts__ctl2_chkItemChecked" type="checkbox" name="DgAccounts:_ctl2:chkItemChecked" onclick="alert('fired ...');DisableAllDataGridCheckBoxes();setTimeout('__doPostBack(\'DgAccounts$_ctl2$chkItemChecked\',\'\')', 0)" language="javascript" />
すべてが順番に表示されますが、サーバー側のイベントは発生しません。これは、チェックボックスが無効になっていることが原因であると考えられます。アラートをそのままにして、チェックボックスを無効にする呼び出しを削除すると、すべて正常に動作します。
チェックボックスが無効になっている場合でも、check-changed イベントを強制的に発生させることはできますか?