ASP.NET多个Button的页面,回车执行按钮事件(转)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ASP.NET多个Button的页面,回车执行按钮事件(转)相关的知识,希望对你有一定的参考价值。
主要有两种实现方法分别是:javascript的方法与Panel的方法
一、JavaScript的方法
①单输入框(文本框)单按钮的实现方法
以下功能实现:在输入框中输入内容之后,按回车键就执行按钮事件!
在.aspx页面的Head区域中添加:
<SCRIPT LANGUAGE="javacript"> function SubmitKeyClick(button) { if (event.keyCode == 13) { event.keyCode=9; event.returnValue = false; document.all[按钮ID].click(); } } </SCRIPT>
②多输入框(文本框)多按钮的实现方法
以下功能实现,在不同的输入框中输入内容后,按回车键执行不同的按钮事件!
在.aspx页面的Head区域中添加:
<script type="text/javascript"> function BtnClick(obj) { if(event.keyCode==13) { if(obj==document.all.文本框ID) { document.all.Button1.click(); } else { document.all.Button2.focus(); document.all.Button2.click(); } } } </script>
在页面的cs文件的Load中添加:
this.文本框ID.Attributes.Add("onkeydown","BtnClick(this);"); this.另外的文本框ID.Attributes.Add("onkeydown", "BtnClick(this);");
二、使用Panel控件
在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所引起的一些困难都可以迎刃而解。
原文:http://blog.sina.com.cn/s/blog_6a89f8100100mwwj.html
http://blog.sina.com.cn/s/blog_568e662301018n2i.html
以上是关于ASP.NET多个Button的页面,回车执行按钮事件(转)的主要内容,如果未能解决你的问题,请参考以下文章
ASP.Net上如何用回车键代替Button。 比如登陆的时候TextBox值写完以后,按下回车自动跳转页面。
ASP.NET一个页面多个Button按钮事件避免数据验证控件RequiredFieldValidator冲突方法
asp.net中点击按钮页面不刷新的效果如何实现~~!求详细!