上述功能的伪代码描述如下:在一个按钮触发事件里面,
- protected void btnTransfer_Click( object sender, EventArgs e)
- {
- if(满足条件)
- {
- 弹出confirm确认对话框;
- }
- if(用户选择"Yes")
- {
- 做用户选择“确定”该做的事情
- }
- else
- {
- 做用户选择“取消”该做的事情
- }
- }
在WinForm中实现上述功能可以说是轻而易举的一件事,只要如下做即可:
- private void button1_Click(object sender, System.EventArgs e)
- {
- DialogResult result = MessageBox.Show("Message");
- if(result == DialogResult.Yes)
- {
- //If user choose "Yes" to do something
- }
- else
- {
- //If user choose "No" to do something
- }
- }
然而现在到了WebForm中,看很多网上的帖子提供的方法,基本没有实现上述的功能,所以我把我的做法提供出来,供大家参考,如有不足之处,还请指正。
首先,在需要实现该功能的页面上放一个HiddenField控件和LinkButton控件,如下设置:
- <asp:HiddenField ID="confirmReturnValue" runat="server" />
- <asp:LinkButton ID="LinkButton1" runat="server" οnclick="LinkButton1_Click"></asp:LinkButton>
HiddenField控件主要用来保存confirm对话框的返回值,LinkButton控件用来在获取confirm返回值后通过__doPostBack()函数触发它的单击事件,在它的单击事件处理函数中再根据confirm返回值继续后台流程。
接下来,要做的是提供一个Script函数,源代码如下:
- <script language="javascript" type="text/javascript">
- function GetConfirm()
- {
- var confirmReturnValueCon = document.getElementById('<%=confirmReturnValue.ClientID%>');
- if (confirm('Message'))
- {
- confirmReturnValueCon.value = "True";
- }
- else
- {
- confirmReturnValueCon.value = "False";
- }
- __doPostBack("<%= LinkButton1.UniqueID %>", "");
- }
- </script>
最后,在后台cs文件中做如下判断,若满足条件则执行GetConfirm脚本函数,切记,不能再在btnTransfer_Click事件处理函数中获取返回值判断,因为根据页面生存周期,在btnTransfer_Click事件处理函数执行时,会执行完所有的服务端代码之后也就是这个函数里执行到结尾后才会开始执行客户端代码,在这里也就是执行你的GetConfirm脚本函数。
- protected void btnTransfer_Click(object sender, EventArgs e)
- {
- if(满足条件)
- {
- this.ClientScript.RegisterStartupScript(ClientScript.GetType(), "",
- "<script>GetConfirm();</script>");//注册脚本,弹出确认对话框
- }
- /*错误,切记不要再在这个事件处理函数中判断这个返回值,下面部分代码应该挪到LinkButton1的单击
- 事件处理函数中去判断*/
- if (confirmReturnValue.Value == "True")
- {
- }
- else
- {
- }
- }
此时应该在LinkButton1控件的处理函数中根据这个返回值来判断,当执行GetConfirm脚本函数时,会回发LinkButton1的Click事件,然后就可以在LinkButton1_Click事件处理函数中根据这个返回值来继续你的后台流程判断。
- protected void LinkButton1_Click(object sender, EventArgs e)
- {
- if (confirmReturnValue.Value == "True")
- {
- //做用户选择“确定”该做的事情
- }
- else
- {
- //做用户选择“取消”该做的事情
- }
- }
总结一下,受到页面生存周期的影响,上述整个功能的代码执行流程为:用户点击btnTransfer按钮并引发该按钮的Click事件-->执行完btnTransfer_Click事件处理函数中所有服务端代码-->执行GetConfirm客户端脚本函数-->通过__doPostBack函数引发LinkButton1按钮回传-->执行LinkButton1按钮的Click事件处理函数-->根据confirm返回值(保存在confirmReturnValue控件中)继续后台程序逻辑。