一、开始调式下面的程序,发现Button在js中设置disabled后无法执行后台代码(btnsave_Click)问题

<asp:Button ID="btnsave" runat="server" Text="确 定"  OnClick="btnsave_Click" OnClientClick="this.disabled = true;alert('提示');" />

二、有的朋友会认为在js代码后面加上 return true就可以了,但这样也是不可行的。

<asp:Button ID="btnsave" runat="server" Text="确 定"  OnClick="btnsave_Click" OnClientClick="this.disabled = true;alert('提示');return true;" />

OnClientClick是执行客户端代码,客户端被禁用了,OnClick是在Submit之后在Server端执行的,而没有提交,你叫OnClick怎么执行?
三、解决问题:
发现以前用到过 ASP.NET中的UseSubmitBehavior属性,在btn中加上UseSubmitBehavior="false",然后就会提交到服务器执行后台代码了。
<asp:Button ID="btnsave" runat="server" Text="确 定"  OnClick="btnsave_Click" OnClientClick="this.disabled = true;alert('提示');" UseSubmitBehavior="false" />

四、原因
当一个Button的UseSubmitBehavior="false" 时,你可以看一下生成的页面源代码中的onclick后面已经加上了 __doPostBack('btnsave','')。
如果不加UseSubmitBehavior="false",把btn(input)设置为 type="sumbit" 应该也是可以的。
 <script type="text/javascript" language="javascript">
function fcMode(obj)
{obj.disabled = true;alert('提示');
}
</script>
<asp:Button ID="btnsave" runat="server" Text="确 定"  OnClick="btnsave_Click" OnClientClick="fcMode(this)" />
<!--下面是页面显示源码-->
<input name="btnsave" class="btn blue" id="btnsave" onclick="javascript:fcMode(this);__doPostBack('btnsave','')" type="button" value="确 定"/>


五、详解UseSubmitBehavior="false"

在WEB页面上,通常SUBMIT类型的按钮会被默认指派为所在FORM表单的提交按钮

在做ASP.net WEB应用的时候,常常遇到会在同一个页面里添加多个按钮,而每个按钮肯定都会触发页面回送事件。

在ASP.NET中,只能指定一个带有runat="server"的FORM表单,因此,这个表单会指派哪个按钮为默认提交按钮呢?

不做任何处理的情况下是很难控制的,例如在同一个页面里做了N个搜索框,设计上理想的思路是在某一输入框输入关键字后,用户按ENTER键,执行当前输入的输入框对应的提交按钮,但是,实际上往往事与愿违。无论怎么提交,总是会只执行某一个按钮事件。

如果指定Form的默认按钮,可以指定Form的DefaultButton属性值为一个按钮的ID。但这样下来,回车时就永远执行这个按钮,其它按钮无法被回车触发。

网上很多方法都是使用JAVASCRIPT来进行判断,在输入框中加入KEYPRESS之类的事件,然后检查eventCode,如果是回车键,那么就指定执行某一个按钮。

这个方法不是不行,但是,并不好维护,而且在处理复杂的逻辑时,往往不好控制。

其实,ASP.NET给出了很好的解决方案,只是通常不被人注意。

首先,屏蔽浏览器提交模式,也就是说,FORM不再默认指定一个ENTER提交的按钮

方法是将控件button的UseSubmitBehavior设置为false(LinkButton和ImageButton没有这个属性,不必设置),这样这个按钮就不会接受回车提交,这样就不会出现用户焦点在页面某处聚焦时按回车提交的情况。

为什么会这样呢?查看页面源文件我们会发现本来ASP.NET的BUTTON服务器控件在发送到客户端后type="submit",但这时UseSubmitBehavior设置为false后,type="button" ,而且多了一个onclick事件,内容是"javascript:__doPostBack('Button1','')" id="Button1",这样,就说明,这个按钮不再是FORM的提交按钮了,而只是一个普通按钮,要提交页面必须执行click事件,所以怎么点回车,也不会执行这个按钮的提交事件。

刚才只是第一步,阻止了默认的提交。但是,我们要的效果是回车可以提交啊。只是设置这一个属性当然无法达到我们想要的效果。

接下来,我们要了解Panel控件。

其实Panel控件是非常有用的,他是一个容器,在ASP.NET的Panel控件中有一个属性 DefaultButton, 这个属性在ASP.NET的Form控件中也有(前有叙述)。

Panel是一个特殊的控件 MSDN上的说明是:使用Panel 控件来组织 Form、另一 Panel 或模板中的内容和控件。

也就是说Panel是ASP.NET对Form的一个补充,可以给表单分区域的控件,这也是为什么ASP.NET AJAX容器使用该控件的原因。

我们都知道,ASPX只能有一个runat=“server”的FORM表单,那么要进行细致,具体的FORM操作怎么办,那么就得靠Panel控件

这里,我们就会用到Panel的这个功能

将一组输入框和按钮放在一个Panel中,指定该Panel的DefaultButton属性为按钮ID,这样,当用户焦点处于这个Panel内的某一控件时,点击回车就会执行这个Panel的DefaultButton所指定的按钮。

Panel是Form的补充控制,可以通过使用Panel对表单进行更多的操作,这样,ASP.NET只能拥有一个Form所引起的一些困难都可以迎刃而解。

转载于:https://www.cnblogs.com/elves/p/3738978.html

解决Button设置disabled后无法执行后台代码问题相关推荐

  1. onchange监听input值变化及input隐藏后change事件不触发的原因与解决方法(设置readonly后onchange不起作用的解决方案)

    onchange监听input值变化及input隐藏后change事件不触发的原因与解决方法(设置readonly后onchange不起作用的解决方案) 参考文章: (1)onchange监听inpu ...

  2. Windows10用fiddler抓包Android应用(解决手机设置代理后无法上网,设置只抓app包)

    #1.环境准备 1.电脑上安装fiddler #2.设置 1.fiddler>Tools>Fiddler Options>Connections 勾选Allow remote com ...

  3. 表单设置 disabled 后无法传值到后台的解决办法

    提交 from 表单时,如果input字段设为disabled,该字段是无法正常提交给后台的. <input type="text" name="name" ...

  4. 终极方案!解决正确设置LaunchImage后仍然不显示的问题

    对于如何设置LaunchImage,网络上有各种各样的教程. 主要分2点: 1. 正确设置图片尺寸 2. 取消LaunchScreen.xib 但是经过上述步骤之后,你觉得完全没有问题了,但是仍然无法 ...

  5. button设置disabled属性不生效_jQuery属性节点

    发现了很好玩的表情可以插入嘻嘻嘻嘻嘻嘻嘻 1.attr属性操作 在jQuery中,可以通过attr()方法操作属性,可以是固有属性,也可以是自定义属性. 1.1 设置属性值 // 设置单个属性 $(& ...

  6. 解决Jenkins设置管理员后登陆提示:Access Denied admin没有Overall/Read权限

    背景: 1.设置管理员密码后,再次登陆提示:Access Denied Administrator is missing the Overall/Read permission 2.或者设置完权限出现 ...

  7. 解决input设置背景后,在ie7下浏览内容过长背景跟着滚动

    先发发牢骚,万恶的IE啊.这么点问题害我走弯路,浪费时间,浪费生命.本以为加上background-attachment:fixed;问题就没了,结果问题依然存在,查资料说好像是ie bug.无语,天 ...

  8. onchange监听input值变化及input隐藏后change事件不触发的原因与解决方法(设置readonly后onchange不起作用的解决方案)...

    转自:https://www.cnblogs.com/white0710/p/7338456.html 1. onchange事件监听input值变化的使用方法: <input id=" ...

  9. html不能超出div的宽度,DIV设置width后超出父元素应该如何解决

    这次给大家带来DIV设置width后超出父元素应该如何解决,解决DIV设置width后超出父元素的注意事项有哪些,下面就是实战案例,一起来看一下. 前言 本文介绍的是利用CSS3的新属性box-siz ...

最新文章

  1. python读取xml文件报错ValueError: multi-byte encodings are not supported
  2. 微信小程序之上传附件
  3. Unity的三种Interceptor
  4. WiresShark 使用方法
  5. Invocation of init method failed; nested exception is org.hibernate.InvalidMappingException: Could n
  6. Frida-跨平台注入工具基础篇
  7. [剑指offer][JAVA]面试题第[64]题[求1+2+…+n][逻辑运算符]
  8. c字符串分割成数组_excel这个复杂数组公式怎么读?
  9. 二级考试c语言100题,国家计算机二级考试 C语言上机100题
  10. 西部数据暂停与华为的合作关系及发货
  11. 33. 深入解析互联网协议的原理
  12. POJ2356 Find a multiple 鸽巢原理
  13. MySql批量插入语句(INSERT)
  14. 服务器lga771芯片组,LGA775主板改造用771 CPU教程
  15. 2、网站重构之本地映射外网域名
  16. matplotlib函数库使用imshow绘制像素图片
  17. 2022年哪些浏览器安全、速度快、好用又不卡?
  18. win7、win10连接到win10共享打印机出现0x0000011b错误
  19. CSDN发文章显示超时请重试
  20. 逃出996,追逐新目标!

热门文章

  1. 【IT资讯】TIOBE 7月编程语言排行榜显示,这些编程语言更吃香
  2. 【Ubuntu】 使用Xshell5连接Ubuntu16.04
  3. 数据结构-----图的拓扑排序和关键路径算法
  4. 完全平方数—leetcode279
  5. php json返回sql,php – 如何从我的特定SQL查询中返回json?
  6. CentOS查看CPU信息
  7. 关于hibernate的关联外键生成以及外键属性列的正确插入即:解决外键插入时,在关联表中除了外键列为空,其它属性均正常级联保存
  8. linux服务器cuda,cudnn的安装与卸载
  9. c++ setstate() 和 clear() 函数
  10. leetcode最小面积_每日一道 LeetCode (51):盛最多水的容器