Chinaunix首页 | 论坛 | 博客
  • 博客访问: 51799
  • 博文数量: 42
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 399
  • 用 户 组: 普通用户
  • 注册时间: 2012-07-26 20:33
文章分类

全部博文(42)

文章存档

2014年(3)

2013年(39)

我的朋友

分类: JavaScript

2013-10-28 13:53:24

经常会有正样的需求,在用户做一个不易恢复并且容易误操作的动作时需要给用户以提示,用户确认后继续执行动作。

简单的解决方案是:前台用OnClientClick事件中使用Confirm给用弹出确认提示框,用户确认后继续执行后台代码,取消的不做处理。但是最近突然遇到这种方法不灵了,反复确认后发现了button的UseSubmitBehavior属性被设置成了false。类似问题,网上找到了

以这个帖子为蓝本说明下具体的解决方案,这里只说明帖子中指出的第一种方案:

原有问题代码如下:OnClientClick=" return true;" OnClick="IbtnSave_Click1"  UseSubmitBehavior="false"/>

解决方法如下:

按钮代码修改如下:

 OnClientClick=" if(!CheckDelete()){return false;}" OnClick="IbtnSave_Click1"  UseSubmitBehavior="false"/>

http://www.cnblogs.com/studyever/archive/2012/09/18/2690885.html
---------------------------------------------------------------------------------------------------------------------------------------------
这个是我的aspx页面的button代码 :

我在OnClientClick事件中直接写的返回true,居然服务端的事件OnClick里面也不执行了。
有没有人遇到这个问题帮帮解决下,我也查了很多地方了,都没有好的解决方法。

张占刚工程师 回答
对于 Server 端的Button,UseSubmitBehavior 非常特殊,我们看一下MSDN对这个属性的描述:

使用 UseSubmitBehavior 属性来指定 Button 控件 使用 客户端浏览器的提交机制  还是  ASP.NET 回发机制。默认情况下,此属性的值为 true,从而导致 Button 控件使用浏览器的提交机制。如果指定为 false,则 ASP.NET 页框架将客户端脚本添加到页面,以将窗体发送到服务器。

如你所描述的:
你设置 UseSubmitBehavior = False,则该 Button 需要采用ASP.NET 回发机制来触发server端的事件,所谓的回发机制,实际就是.NET自动给页面添加了相应的JS代码,并且给这个BUTTON自动添加了客户端的onclick事件。此时,你去看页面输出的HTML源码,会看到下面的类似内容:

而这个Button的输出的HTML代码类似下面的:


而你又指定了这个Button的onclientclick事件为 return true,那么.NET页面在自动为BUTTON赋予客户端事件时,会自动判断,并且将这些事件合并到一起执行。此时这个BUTTON的HTML输出变成了下面的样子


你会看到,在__doPostBack 前面,是你自己指定的 return true; 而在JS代码里,return 之后的任何内容都不执行,所以,后面的 __doPostBack 被忽略了,也就是你说的不会触发Server端的事件了。 

解决的方法其实很简单:
第一种,给 onclientclick 指定一个函数,而不是简单的 return true;
第二种,将 button 的onclientclick要做的事,放到 form 的 onsubmit 里去做


阅读(2917) | 评论(0) | 转发(0) |
0

上一篇:代码利器

下一篇:隨機數

给主人留下些什么吧!~~