confirm对话框在WebForm流程控制中的应用

相信大家在WebForm应用程序的开发过程中,经常会遇到下面这种情况:在一定条件下弹出confirm对话框供用户选择,然后在后台获取confirm对话框返回值,并根据该返回值在后台进行流程控制,这基本类似于WinForm开发中的MessageBox功能。在网上看了很多种别人提供的方法,但他们基本都没有把这个问题描述清楚,所以我想根据我自己的一些经验给大家谈一下我的做法,并在实际应用中实现了这个功能,当然这仅仅是其中的一种方法而已。

    上述功能的伪代码描述如下:在一个按钮触发事件里面,

  

[c-sharp] view plain copy print ?
  1. protected void btnTransfer_Click( object sender, EventArgs e) 
  2.     if(满足条件) 
  3.     { 
  4.         弹出confirm确认对话框; 
  5.     }  
  6.  
  7.     if(用户选择"Yes"
  8.     { 
  9.         做用户选择“确定”该做的事情 
  10.     } 
  11.     else 
  12.     { 
  13.         做用户选择“取消”该做的事情 
  14.     } 
 

    在WinForm中实现上述功能可以说是轻而易举的一件事,只要如下做即可:

   

[c-sharp] view plain copy print ?
  1. private void button1_Click(object sender, System.EventArgs e)  
  2.     DialogResult result = MessageBox.Show("Message"); 
  3.  
  4.     if(result == DialogResult.Yes) 
  5.     {         
  6.         //If user choose "Yes" to do something 
  7.     }        
  8.     else 
  9.     { 
  10.         //If user choose "No" to do something         
  11.     } 

    然而现在到了WebForm中,看很多网上的帖子提供的方法,基本没有实现上述的功能,所以我把我的做法提供出来,供大家参考,如有不足之处,还请指正。

    首先,在需要实现该功能的页面上放一个HiddenField控件和LinkButton控件,如下设置:

   

[c-sharp] view plain copy print ?
  1. <asp:HiddenField ID="confirmReturnValue" runat="server" /> 
  2. <asp:LinkButton ID="LinkButton1" runat="server"  οnclick="LinkButton1_Click"></asp:LinkButton> 

    HiddenField控件主要用来保存confirm对话框的返回值,LinkButton控件用来在获取confirm返回值后通过__doPostBack()函数触发它的单击事件,在它的单击事件处理函数中再根据confirm返回值继续后台流程。

     接下来,要做的是提供一个Script函数,源代码如下:

    

[c-sharp] view plain copy print ?
  1. <script language="javascript" type="text/javascript">     
  2.     function GetConfirm()  
  3.     { 
  4.         var confirmReturnValueCon = document.getElementById('<%=confirmReturnValue.ClientID%>');               
  5.  
  6.         if (confirm('Message'))           
  7.         { 
  8.             confirmReturnValueCon.value = "True";  
  9.         } 
  10.         else 
  11.         { 
  12.             confirmReturnValueCon.value = "False"
  13.         } 
  14.  
  15.          __doPostBack("<%= LinkButton1.UniqueID %>", "");  
  16.     } 
  17. </script>  
 

    最后,在后台cs文件中做如下判断,若满足条件则执行GetConfirm脚本函数,切记,不能再在btnTransfer_Click事件处理函数中获取返回值判断,因为根据页面生存周期,在btnTransfer_Click事件处理函数执行时,会执行完所有的服务端代码之后也就是这个函数里执行到结尾后才会开始执行客户端代码,在这里也就是执行你的GetConfirm脚本函数。

   

[c-sharp] view plain copy print ?
  1. protected void btnTransfer_Click(object sender, EventArgs e)  
  2.     if(满足条件) 
  3.     { 
  4.          this.ClientScript.RegisterStartupScript(ClientScript.GetType(), "",  
  5.          "<script>GetConfirm();</script>");//注册脚本,弹出确认对话框 
  6.      } 
  7.  
  8.     /*错误,切记不要再在这个事件处理函数中判断这个返回值,下面部分代码应该挪到LinkButton1的单击
  9.      事件处理函数中去判断*/ 
  10.      if (confirmReturnValue.Value == "True"
  11.     { 
  12.  
  13.     } 
  14.     else 
  15.     { 
  16.  
  17.     } 
   

   此时应该在LinkButton1控件的处理函数中根据这个返回值来判断,当执行GetConfirm脚本函数时,会回发LinkButton1的Click事件,然后就可以在LinkButton1_Click事件处理函数中根据这个返回值来继续你的后台流程判断。

       

[c-sharp] view plain copy print ?
  1. protected void LinkButton1_Click(object sender, EventArgs e)         
  2.     if (confirmReturnValue.Value == "True"
  3.     { 
  4.         //做用户选择“确定”该做的事情 
  5.      } 
  6.     else 
  7.     { 
  8.         //做用户选择“取消”该做的事情 
  9.      } 
 

    总结一下,受到页面生存周期的影响,上述整个功能的代码执行流程为:用户点击btnTransfer按钮并引发该按钮的Click事件-->执行完btnTransfer_Click事件处理函数中所有服务端代码-->执行GetConfirm客户端脚本函数-->通过__doPostBack函数引发LinkButton1按钮回传-->执行LinkButton1按钮的Click事件处理函数-->根据confirm返回值(保存在confirmReturnValue控件中)继续后台程序逻辑。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值