一、开始调式下面的程序,发现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所引起的一些困难都可以迎刃而解。

解决Button设置disabled后无法执行后台代码问题的更多相关文章

  1. JQuery EasyUI弹出对话框解决Asp.net服务器控件无法执行后台代码的方法(转)

    原文:JQuery EasyUI弹出对话框解决Asp.net服务器控件无法执行后台代码的方法 jquery-easyui是一个基于jquery的图形界面插件,利用easyui可以创建很多好看的网页界面 ...

  2. Fineui 解决OnClientClick中无论是返回true或false,都依然执行后台代码的问题

    有时写js代码验证数据,需要在OnClientClick中执行,如果符合条件执行后台代码,不符合则不触发后台代码.刚开始的时候无论返回true或false都会执行后台代码(asp.net写法),看了h ...

  3. jmeter 通过csv data set config 设置参数化后,执行结果显示为<EOF>

    通过csv data set config 设置参数化后,执行结果显示为<EOF>: 反复确认相应的参数的设置均没有问题,其中csv文件编码方式采用uft-8.在csv data set ...

  4. 关于ASP.NET MVC中Response.Redirect和RedirectToAction的BUG (跳转后继续执行后面代码而不结束进程)以及处理方法

    关于ASP.NET MVC中Response.Redirect和RedirectToAction的BUG (跳转后继续执行后面代码而不结束进程)以及处理方法   在传统的ASP.NET中,使用Resp ...

  5. 解决HTML select控件 设置属性 disabled 后无法向后台传值的方法

    大家都知道有时候修改数据的时候我们希望有一些数据是不可以修改的,通常情况下我们会将input框设置为 readonly , 但是 select 控件没有这个属性,需要使用另一个属性 disabled ...

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

    1.环境准备 1.电脑上安装fiddler 2.手机和电脑在同一个局域网内 2.设置 1.fiddler>Tools>Fiddler Options>Connections 勾选Al ...

  7. main函数执行前、后再执行的代码

    一.main结束 不代表整个进程结束  (1)全局对象的构造函数会在main 函数之前执行,          全局对象的析构函数会在main函数之后执行:          用atexit注册的函数 ...

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

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

  9. asp.net 按钮执行前后台方法——前台弹出提示信息,确认后继续执行后台方法,取消则不执行后台方法

    我们做一个测试的web页面,只需要一个button+一个label就ok啦,通过button按钮的后台事件修改label的text属性值来测试是否执行了后台事件里的代码 前台 写一个js方法: < ...

随机推荐

  1. hdu 2037 - 今年暑假不AC(区间调度问题)

    题意:区间调度问题 解法:应用贪心算法,贪心的规则: 在可选的节目中,选取结束时间早的节目. 1: #include<stdlib.h> 2: #include<string.h&g ...

  2. 安装和使用Linux花生壳(公网版)

    一.安装说明 1.下载相应的安装包,安装程序 2.运行程序.配置程序(默认使用/etc/phlinux.conf,如果不存在这个文件则自动进入交互配置) [root@localhost -]# phd ...

  3. Mysql数据库设置定时任务

    最近手头在做一个拍卖的电商项目. 中间需要将到点的拍卖会状态设置为进行中. 我们的解决方案是Mysql的定时器任务,这里进行一个简单的总结. 1.使用范围 不是所有的MySQL版本都支持,Mysql ...

  4. photobooth.js

    HTML5 Webcam for your website, photobooth.js

  5. app中Webview实现下载表格

    <script type="text/javascript"> function getUrl(){ var close = confirm("请点击确定下载 ...

  6. Java——包的概念及使用

    package是在使用多个类或接口时,为了避免名称重复而采用的一种措施,直接在程序中加入package关键字即可 编译语法: javac -d . HelloWord.java -d:表示生成目录,生 ...

  7. canvas入门(画圆)

    1.想在H5上画一个canvas,必须在页面上你需要的地方添加canvas标签, <canvas id="myCanvas"></canvas>   接着需 ...

  8. OpenGL教程

    http://www.opengl-tutorial.org/ http://www.lighthouse3d.com/ http://www.arcsynthesis.org/gltut/ http ...

  9. Saltstack pillar组件

     pillar组件 pillar也是Saltstack最重要的组件之一,其作用是定义与被控主机相关的任何数据,定义好的数据可以被其他组件使用,如模板.state.API等.在pillar中定义的数据与 ...

  10. 注入问题0x00

    1.sqlmap遇到MySQL注入可以成功getshell,但是,遇到sqlserver注入未成功getshell. 2.xp_cmdshell 如何 getshell(1433未对外开放). 解决方 ...