NOVOTS KMS 词汇表 Glossary    联系我们 Contact Us
查询 Search  
   
按类别浏览 Browse by Category
NOVOTS KMS .: 工作心得 .: UseSubmitBehavior导致Server端按钮失效问题

UseSubmitBehavior导致Server端按钮失效问题

对于 Server 端的Button,UseSubmitBehavior 非常特殊,我们看一下MSDN对这个属性的描述:

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

如你所描述的:
你设置 UseSubmitBehavior = False,则该 Button 需要采用ASP.NET 回发机制来触发server端的事件,所谓的回发机制,实际就是.NET自动给页面添加了相应的JS代码,并且给这个BUTTON自动添加了客户端的onclick事件。此时,你去看页面输出的HTML源码,会看到下面的类似内容:
<script type="text/javascript">
//<![CDATA[
var theForm = document.forms['ctl01'];
if (!theForm) {
    theForm = document.ctl01;
}
function __doPostBack(eventTarget, eventArgument) {
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
        theForm.__EVENTTARGET.value = eventTarget;
        theForm.__EVENTARGUMENT.value = eventArgument;
        theForm.submit();
    }
}
//]]>
</script>
而这个Button的输出的HTML代码类似下面的:
<input type="button" name="ctl00$MainContent$Button1" value="Button" onclick="__doPostBack('ctl00$MainContent$Button1','')"

而你又指定了这个Button的onclientclick事件为 return true,那么.NET页面在自动为BUTTON赋予客户端事件时,会自动判断,并且将这些事件合并到一起执行。此时这个BUTTON的HTML输出变成了下面的样子
<input type="button" name="ctl00$MainContent$Button1" value="Button" onclick="return true;__doPostBack('ctl00$MainContent$Button1','')"

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

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


这篇文章对你多有用?

相关文章

article 解决 Windows XP 中网络打印问题的高级步骤
常规故障排除步骤检查基本的网络连接是否工作正

(No rating)  5-5-2010    Views: 1566   
article 妙用Windows 7中隐藏的超级功能——图文并茂的“问题步骤记录器”
请你按照以下方法步骤一试,相信会给你带来超常的...

(No rating)  3-22-2010    Views: 1962   
article 避免Excel2007保存时提示“隐私问题报告”?
Excel2007文件保存时,有时会提示“隐私问题报告”...

  3-30-2010    Views: 3187   

用户评语

添加评语
当前还没有评语.


.: .: .: .: .:
[ 登陆 ]
北京护航科技有限公司 2006

Novots Technologies Limited