发现此问题ASP.NET: OnServerClick event handler not called if using onclick
我实施了一种解决方法:
<button id="idBtnPrint" runat="server" type="submit" onserverclick="BtnPrint_Click" onclick="confirmImpression();">print</button>
javascript函数:
function confirmImpression() {
if (!confirm("sure ?"))
arg.whatever;
}
其中确认是肯定的,当取消回发没有运行时(因为我想要)启动回发只是因为生成错误js“arg未定义”(正常因为arg不是instanciate)脚本被锁定因此没有回发(我也想要。)
但如何正确地做到这一点。我不会在浏览器的状态栏中看到错误。
欢迎任何建议!
谢谢
答案 0 :(得分:11)
我遇到了一个与此非常相似的问题,尽管这个问题已经过时了,但我认为我的回答可能有助于未来的人。如果你有一个javascript方法应该返回一些东西并将它放在OnClientClick中,它仍然不会返回方法真正返回的内容。为了解决此问题,您必须在OnClientClick中返回该方法。
OnClientClick="return MethodName()"
您还需要确保您的方法从确认对话框中返回正确的true / false。
function MethodName() {
if (!confirm('Are you sure you want to X?')){
return false;
}
else{
return true;
}
}
答案 1 :(得分:9)
只需将确认包装在if块中,如果确认失败则返回false。生成回发的标准javascript将附加到支票上,因此如果确认了操作,则会运行。
<button id="idBtnPrint" runat="server" type="submit"
onserverclick="BtnPrint_Click"
onclientclick="if (!confirm('sure ?')) { return false; }">print</button>
arg
未定义的原因是您不将其用作参数,也不在窗口对象中定义。我假设你试图挂钩验证系统,但在这种情况下它不起作用,因为没有调用验证逻辑。如果用户以否定方式回答,您只想停止执行客户端处理程序,而上述代码将执行此操作。
虽然引用问题的答案也可行,但我更喜欢使用完整的javascript语句来帮助理解正在发生的事情。
答案 2 :(得分:3)
您想使用OnClientClick,只返回与确认返回的相反的内容......
<button ... onclientclick="return !confirm('Are you sure ?');">print</button>