通过confirm结果作流程判断的简单应用

最近在做一个添加功能,需要判断某某项是否被添加过,然后给出提示用户,根据用户选择的结果判断是否继续添加,然后选取消又有另外的逻辑.实现这功能当然是用js的confirm对话框,但是问题在于如何获取confirm的结果,毕竟是在客户端触发的,还得把结果传回服务器.在网上查了些资料,说用一个隐藏的htmlbutton,然后调用 __doPostBack来在客户端触发,这个方法确实可行,但是前提是不需要传递参数的情况,也就是__doPostBack的第二个参数用不上,即使给定也无法获取.其实这个参数的获取是要通过控件其本身得到,外部比如想通过click事件是得不到得.而控件其实是继承了 IPostBackEventHandler,然后在 RaisePostBackEvent中获取这个参数,因此想要实现回发又要得到不同的参数,只能让页面 IPostBackEventHandler接口,问题也就迎刃而解.
解决方案如下
1.设置Page指令中  EnableEventValidation="false",否则会提示错误,具体请看MSDN
2.给Page继承 IPostBackEventHandler接口,实现 public void RaisePostBackEvent(string eventArgument)方法
Code1
1public void RaisePostBackEvent(string eventArgument)
2        {
3            using (System.IO.StreamWriter sw = new System.IO.StreamWriter("E:\\test.txt"true))
4            {
5                sw.WriteLine(eventArgument);
6            }

7        }
3.然后在需要的地方注册回发脚本,点击确认将执行RaisePostBackEvent里的逻辑,jsCancel用于触发是一个隐藏的按钮的回发事件,比如取消操作
RegisterPostbackScript
 1string jsContinue = "";
 2            string jsCancel = ClientScript.GetPostBackEventReference(btnCancel, "");
 3            string jsConfirm = "";
 4            if (!IsPostBack)
 5            {
 6                for (int i = 0; i < 10; i++)
 7                {
 8                    if (i % 2 == 0)
 9                    {
                            // 注册继续操作的脚本,触发页面的回发事件,传递参数i
10                        jsContinue = ClientScript.GetPostBackEventReference(this, i.ToString());
11                        jsConfirm = string.Format("if (confirm('是否继续操作')) {0}; else {1};", jsContinue, jsCancel);
12                        ClientScript.RegisterClientScriptBlock(GetType(), Guid.NewGuid().ToString(), jsConfirm, true);
13                    }

14                }

15            }

另外ClientScript注册RegisterClientScriptBlock的脚本是在执行完所有server端的代码之后才执行客户端脚本的,
并不是想象的那样循环一次执行一个confirm,可能会对某些业务逻辑有些限制.
当然解决方案还是有很多的,也可考虑用AJAX技术,学习中......

转载于:https://www.cnblogs.com/shenba/archive/2007/12/21/1009507.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值