layer实现在前台删除前确认弹出框,并回调后台删除事件
2015-12-03 19:16
561 查看
最近遇到一些问题,用layer提示消息框,比如删除时,提示消息确定后 return false时,则不管用了,因为layer不支持阻塞,下面就解决一下这个问题:(本文使用Xcode,如要学习,请复下面连接到地址栏:http://www.cnblogs.com/nnhy/archive/2012/02/27/2369263.html)
删除按钮代码:
[align=left]注意添加属性 UseSubmitBehavior="false" 这个属性必须添加,使删除按钮手动提交[/align]
[align=left]基本思路为:[/align]
重新写一个函数来封闭下layer.confirm();如下
参数说明:msg为提示信息内容,eventTarget为要提交到后台事件的控件name,eventArgument为提交参数,没有参数时为空就行了。
以下为详细解析:
js的代码:
后台删除按钮事件代码:
这时还要在Page_load里添加回调的判断语句(代码如下):
这时执行会发现
页面报这个错误
发生原因:
.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:写的比较匆忙,有任何意见和建议的望回复,我也会更正错误、解决问题。
本篇经验系本人依照真实经历原创,未经许可,谢绝转载。
删除按钮代码:
<asp:Button ID="btnDel" name="btnDel" runat="server" Text="删除" class="btn btn-gray" OnClientClick="return resDel();" OnClick="btnDel_Click" UseSubmitBehavior="false" />
[align=left]注意添加属性 UseSubmitBehavior="false" 这个属性必须添加,使删除按钮手动提交[/align]
[align=left]基本思路为:[/align]
重新写一个函数来封闭下layer.confirm();如下
参数说明:msg为提示信息内容,eventTarget为要提交到后台事件的控件name,eventArgument为提交参数,没有参数时为空就行了。
function layerConfirm(msg, eventTarget, eventArgument) { layer.confirm(msg, function (index) { __doPostBack(eventTarget, eventArgument); }); }
以下为详细解析:
js的代码:
<script type="text/javascript"> function resDel() { layer.confirm("您确定要删除吗?", function (index) { __doPostBack('btnDel', '1'); }); } </script>
后台删除按钮事件代码:
/// <summary> /// 删除按钮事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void btnDel_Click(object sender, EventArgs e) { string select = CRequest.GetString("selectid"); if (select.Trim() == "") { Jscript.Alert("您没有选择数据!", this.Page); return; } if (_user.DepartmentTypeId == (int)AdminDepartmentTypeEnums.Manager || _user.IsGroupLeader) { FriendlyLink.DeleteAll(string.Format("Id in({0})", select)); Jscript.AlertAndRedirect("删除成功!", this.Request.RawUrl); } else { Jscript.Alert("您没有权限删除!", this.Page); return; } }
这时还要在Page_load里添加回调的判断语句(代码如下):
string controlName = Request.Params.Get("__EVENTTARGET");//eventTarget为要提交到后台事件的控件name string eventArgument = Request.Params.Get("__EVENTARGUMENT");//用此参数判断按钮是否被点击(参数值可随意写) if (controlName == "btnDel" && eventArgument == "1")//判断两个参数是否满足对应的数据,如满足则调用事件 { btnDel_Click(sender, e); }
这时执行会发现
页面报这个错误
发生原因:
.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:写的比较匆忙,有任何意见和建议的望回复,我也会更正错误、解决问题。
本篇经验系本人依照真实经历原创,未经许可,谢绝转载。
相关文章推荐
- 有限自动机的构造与识别
- 平衡堆+贪心 hdu1588 合并果子
- 有限自动机
- jackson.ObjectMapper在序列化Timestamp类型的值时比实际时间少8个小时
- jackson.ObjectMapper在序列化Timestamp类型的值时比实际时间少8个小时
- 使用py2exe生成独立的exe文件
- 1203正规式转换为有穷自动机
- nginx配置:登录使用https
- 深入CSS,让网页开发少点“坑”
- The beginning iOS8 Programming with Swift 中文翻译 - 3
- 《代码阅读方法与实践》阅读笔记一
- solrcoloud
- 理解GDT全局描述符的作用
- iOS_UITabBarController 标签视图控制器
- 12月3号条件控制语句和循环语句
- flexPaper +swftools实现文档在线阅读
- Memcached概念、作用、运行原理、特性、不足简单梳理(1)
- Struts2接收参数的三种方式
- TestNG Eclipse Plugin Installation - Offline
- 我的2015最后一个挣扎月~~~~