我们有一个简单的数据网格。每行都有一个复选框。复选框设置为自动回发,并且代码隐藏具有复选框选中更改事件的事件处理程序。这一切都按预期工作,没有什么复杂的。
但是,我们希望在选中复选框后立即禁用复选框以防止重复提交,即选中复选框,通过客户端 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 事件?