一个好的用户界面,在用户进行数据操作前特别是进行数据的修改、删除等操作前,必须提醒用户进行确认:是否继续进行选定的操作,防止用户错误操作,对于WinForm应用程序来说非常简单,而WebForm应用相对难一点。
原理其实也很简单,就是将页面的一些会引起postback到服务器端的事件作一次客户端的确认。可以通过客户端的javascript来做到这点。你可以使用window.confirm方法来让用户确认,然后用window.event.returnValue=false;来取消掉当前事件(也就是将onclick方法取消掉,所以就不postback到服务器端,也就不执行你的更新,删除逻辑)。
1、首先在页面中添加一段JavaScript函数
function confirm_click()
{
var result=window.confirm("你确定需要继续吗?");
if(result==false)
{
window.event.returnValue =false;
}
}
</script>
2、然后在服务器端Page_load事件里面给控件加入onclick的事件处理器(VB.NET)
btnSearch.Attributes.Add("OnClick", "confirm_click();")
或者是直接书写JavaScript代码
btnSearch.Attributes.Add("OnClick", "return confirm(""Are you sure you want to delete?"");")
以上是对单个控件设置,脚本代码可以直接添加,相对简单。但是对于DataGrid中的各种按钮列,就复杂一些,但是这种应用却非常的多,例如DataGrid中的编辑列,下面说一下我的实现方法。
其实还是和前面的在单个控件上添加事件处理器一样,找到DataGrid中某列中的所有按钮控件,逐个添加事件处理器,在这里我们需要使用DataGrid的ItemCreated事件,在该事件中遍历DataGridItem中的某个(或者)所有单元格中包含的所有控件,在相应的控件上添加事件处理器,示例代码如下:
Dim dgi As DataGridItem = e.Item
If (dgi.ItemType = ListItemType.Item OrElse dgi.ItemType = ListItemType.AlternatingItem) Then
' 本例只检查DataGrid的Item和AlternatingItem行
Dim c As Control
For Each c In dgi.Cells(2).Controls ' 只检查第3列中包含的LinkButton控件
If TypeOf c Is LinkButton Then
Dim lbc As LinkButton = c
lbc.Attributes.Add("OnClick", "confirm_click();") ' 在该控件上添加事件处理器
End If
Next
End If
End Sub
这样,运行的结果就是在DataGrid的所有行的第3列中的LinkButton上添加了确认代码。