layer实现在前台删除前确认弹出框,并回调后台删除事件

最近遇到一些问题,用layer提示消息框,比如删除时,提示消息确定后 return false时,则不管用了,因为layer不支持阻塞,下面就解决一下这个问题:(本文使用Xcode,如要学习,请复下面连接到地址栏:http://www.cnblogs.com/nnhy/archive/2012/02/27/2369263.html)

删除按钮代码:

<asp:Button ID="btnDel" name="btnDel" runat="server" Text="删除" class="btn btn-gray" OnClientClick="return resDel();" OnClick="btnDel_Click" UseSubmitBehavior="false" />
注意添加属性 UseSubmitBehavior="false"  这个属性必须添加,使删除按钮手动提交
基本思路为:
重新写一个函数来封闭下layer.confirm();如下
参数说明:msg为提示信息内容,eventTarget为要提交到后台事件的控件name,eventArgument为提交参数,没有参数时为空就行了。
1 function layerConfirm(msg, eventTarget, eventArgument) {
2           layer.confirm(msg, function (index) {
3               __doPostBack(eventTarget, eventArgument);
4            
5           });
6     
7       }

以下为详细解析:

js的代码:

<script type="text/javascript">
    function resDel() {
        layer.confirm("您确定要删除吗?", function (index) {
            __doPostBack('btnDel', '1');
        });

    }
</script>

后台删除按钮事件代码:

 1 /// <summary>
 2         /// 删除按钮事件
 3         /// </summary>
 4         /// <param name="sender"></param>
 5         /// <param name="e"></param>
 6         protected void btnDel_Click(object sender, EventArgs e)
 7         {
 8             string select = CRequest.GetString("selectid");
 9             if (select.Trim() == "")
10             {
11                 Jscript.Alert("您没有选择数据!", this.Page);
12                 return;
13             }
14             if (_user.DepartmentTypeId == (int)AdminDepartmentTypeEnums.Manager || _user.IsGroupLeader)
15             {
16                 FriendlyLink.DeleteAll(string.Format("Id in({0})", select));
17                 Jscript.AlertAndRedirect("删除成功!", this.Request.RawUrl);
18             }
19             else
20             {
21                 Jscript.Alert("您没有权限删除!", this.Page);
22                 return;
23             }
24         }

这时还要在Page_load里添加回调的判断语句(代码如下):

1 string controlName = Request.Params.Get("__EVENTTARGET");//eventTarget为要提交到后台事件的控件name
2                 string eventArgument = Request.Params.Get("__EVENTARGUMENT");//用此参数判断按钮是否被点击(参数值可随意写)
3                 if (controlName == "btnDel" && eventArgument == "1")//判断两个参数是否满足对应的数据,如满足则调用事件
4                 {
5                     btnDel_Click(sender, e);
6                 }

这时执行会发现

页面报这个错误

  • 发生原因:
.NET基于页面中的输出元素会在最终页面中生成一个__EVENTVALIDATION隐藏字段。做了一个简单的测试。页面中创建一个<asp: button id="btnSubmit" runat="server" text="Submit" tooltip="Submit" />,同时创建对应的Click事件处理程序。运行程序,可以正确响应事件。然后设置btnSubmit.Visable=false,手动在页面 上面添加<input type="submit" name="btnSubmit" value="Submit" />。运行程序,会出现一个包含EnableEventValidation内容的异常。设置<@Page EnableEventValidation="false">再运行程序,又可以正确响应事件。观察前后两次__EVENTVALIDATION 的内容,可以发现是不同的。关于出现的异常,可以认为在输出的时候没有包含btnSubmit,可是再提交到后台的时候却有相应的内容,前后不一致,所以 在开启事件校验的情况下.NET抛出了异常。

  • 解决办法1:
Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        //绑定数据;
    }
}
  • 解决办法2:
在页面头部<%@Page ....  %>中添加  EnableEventValidation="false"
 
这个时候再执行,页面已经能正常layer提示并删除了,希望会帮到你。
PS:写的比较匆忙,有任何意见和建议的望回复,我也会更正错误、解决问题。
 
 
                             本篇经验系本人依照真实经历原创,未经许可,谢绝转载。

 

 

 

 

转载于:https://www.cnblogs.com/liuyanpeng/p/5017315.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值