Javascript ASP.NET-添加到按钮的onclick属性意味着页面无法确定回发的来源

Javascript ASP.NET-添加到按钮的onclick属性意味着页面无法确定回发的来源,javascript,asp.net,postback,Javascript,Asp.net,Postback,我刚刚在ASP.NET中的一个按钮上添加了一些JavaScript来禁用该按钮(以防止用户提交表单两次) 当我单击此按钮时,页面返回正常,但没有运行控件事件处理程序-ASP.NET似乎无法确定哪个控件返回了页面 我有点被这种意想不到的行为难住了。有人能解释一下并提出一种替代方法吗?试试这个: <asp:Button ID="Button1" UseSubmitBehavior="false" OnClientClick="javascript:document.getEleme

我刚刚在ASP.NET中的一个按钮上添加了一些JavaScript来禁用该按钮(以防止用户提交表单两次)

当我单击此按钮时,页面返回正常,但没有运行控件事件处理程序-ASP.NET似乎无法确定哪个控件返回了页面

我有点被这种意想不到的行为难住了。有人能解释一下并提出一种替代方法吗?

试试这个:

<asp:Button ID="Button1" UseSubmitBehavior="false" 
     OnClientClick="javascript:document.getElementById('Button1').disabled = true;    __doPostBack('__Page', '');" 
     onclick="Button1_Click" runat="server" Text="Button" />

不需要额外的检查就可以通过

在您对如何添加onclick的评论之后:
只需添加“回发”(“u Page”,“YOURBUTTONNAME”)并检查服务器端的事件参数。

如果在按钮回发之前禁用该按钮,则服务器端事件不会注册

处理此问题的更简单方法是在单击后隐藏按钮,或者创建一个处理程序,防止第二次单击级联到表单post

上次我在onclientclick中使用.style.display=“none”时遇到了这个问题,它完成了我需要的技巧。 Disabled不仅仅是一种样式,它是服务器尊重的一种状态

<asp:Button ID="Button1" OnClientClick="javascript:this.style.display = 'none'" 
 onclick="Button1_Click" runat="server" Text="Button" />


它是ASP.NET按钮控件还是HTML按钮?如果它是ASP.NET按钮控件,JavaScript是在OnClick还是OnClientClick中?它是ASP.NET按钮服务器控件。我通过扩展控件(即通过继承)将onlick=“Foo();”直接添加到标记中。我从来没有想到这一点,但是的,你说得很对。非常感谢。这是对我问题第一部分的正确回答,即为什么会出现这个问题?我已经将Eluvitar的答案标记为正确的,因为它提供了一个解决方案。它可以工作,但它很脆弱,如果你把这个按钮放在ajax容器中,他的解决方案将不允许容器捕捉点击并悄悄地发挥其魔力。今天是6打或1/2打,如果你在整个系统中添加盐和胡椒,会有很大的不同。我会试试这个,但乍一看,我不明白为什么它会绕过开发Chris提到的HTML问题。禁用的控件不会发布任何内容。我很乐意处理我不懂的事情!我明天去看看,谢谢。谢谢!这是工作,但我不得不调整它。__doPostBack调用在第一个参数中需要按钮的name属性,而不是在第二个参数中。则无需额外编码(例如,服务器端检查已发布字段)。