使用标准的asp:Button组件时,必须使用以下技术取消自动回发(或有条件地进行回发):
通过Button.OnClientClick属性指定客户端操作;
实现一个逻辑,该逻辑返回一个布尔值,指示是否应该执行回发。
以下内容不会取消回发(尽管“OnClientClickHandler”方法返回“false”):
<asp:Button ID="btn" runat="server" OnClientClick="OnClientClickHandler();" />
function OnClientClickHandler() {
return false;
}
以下实施方案:
<asp:Button ID="btn" runat="server" OnClientClick="return OnClientClickHandler();" />
看起来这种行为是由JavaScript代码范围的细节引起的。无论如何,我对这个场景的低级实现细节很感兴趣。
为什么第一个实现(在“OnClientClickHandler”方法调用之前没有“return”操作符)不工作?
答案 0 :(得分:0)
来自MSDN
使用OnClientClick属性指定其他客户端 引发Button控件的Click事件时执行的脚本。 您为此属性指定的脚本将在 除了控件之外,按钮控件的OnClick属性 预定义的客户端脚本。
并且它也提到了SubmitBehaviour
使用UseSubmitBehavior属性指定是否使用Button控件 使用客户端浏览器的提交机制或ASP.NET回发 机制。默认情况下,此属性的值为true,从而导致 按钮控件使用浏览器的提交机制。如果你指定 false,ASP.NET页面框架将客户端脚本添加到页面 将表单发布到服务器。
<asp:Button ID="btn" runat="server" OnClientClick="return OnClientClickHandler();" UseSubmitBehavior="false" />
试试这个
function CancelPostBack()
{
return false;
}
c#代码。在PageLoad事件中。
btn.Attributes.Add("onclick","return CancelPostBack();");
答案 1 :(得分:0)
您需要添加return
的原因是因为从事件处理程序返回false是取消默认行为的方法(在这种情况下,提交表单)。
另一种方法是执行event.prefentDefault()
OnClientClick="OnClientClickHandler();"
等同于
function onclick(){
OnClientClickHandler();
}
而OnClientClick="return OnClientClickHandler();"
等同于
function onclick(){
return OnClientClickHandler();
}
你看到了区别吗?在第一种情况下,您只是执行该函数,但什么都不返回。