最近遇到一些问题,用layer提示消息框,比如删除时,提示消息确定后 return false时,则不管用了,因为layer不支持阻塞,下面就解决一下这个问题:
删除按钮代码:
<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:写的比较匆忙,有任何意见和建议的望回复,我也会更正错误、解决问题。