0

我的 aspx 文件中有以下代码:

<button type="button" id="btnAskQuestion" runat="server" onserverclick="btnAskQuestion_Click">Ask Question</button>

我已经尝试了所有我能想到的组合onclick="return false;"onclick="preventDefault()"包括将它们放在被调用的 javascript 函数中。我尝试的每件事都有两个结果之一:要么我得到回发,要么服务器端代码 (btnAskQuestion_Click) 永远不会执行。

知道我可能做错了什么吗?

4

4 回答 4

6

您不能以这种方式执行服务器端代码,使用onserverclick原因回发。

如果您希望阻止整页刷新并仍然执行服务器端代码,则必须通过调用客户端 JS 函数onclick并从那里执行 AJAX 调用。

另一种选择是使用您的按钮作为 UpdatePanel 的触发器 - 这样只会执行部分回发。

于 2013-07-11T20:56:52.583 回答
3

尝试UseSubmitBehavior="false"在按钮标记中使用该属性。

或者您可以使用“技巧”:

标记

<button onclick="myFunction()">Click Me!</button>
<div style="display:none">
   <asp:Button runat="server" id="btnButton" .../>
</div>

js

function myFunction()
{
  if (true statement)
    $("[id$=btnButton]").click();
  else
    alert("false");
}

这样做是您使用普通标记处理内容并使用 js 执行逻辑。您可以触发单击在服务器中执行某些操作的按钮。

于 2013-07-11T20:55:19.550 回答
2

OnClick,在服务器上触发和OnClientClick在客户端浏览器上触发。你应该做这个:

<asp:Button ID="btnAskQuestion" runat="server" 
            OnClick="btnAskQuestion_Click" 
            OnClientClick="return myfunction();">Ask Question</asp:button>

如果 myFunction 返回 true,那么您将回发到服务器。

于 2013-07-11T20:49:20.773 回答
1

我的回答仅适用于ASP:Button,不适用于您正在使用的按钮控件。如果有选择,我会切换到ASP:Button.

你正在寻找OnClientClick. 如果你把你的 JavaScript 代码放在那里,它会在 PostBack 到达服务器之前杀死它。

另一方面,如果您希望在没有 PostBack 的情况下执行服务器代码,那是不可能的。PostBack 是触发服务器采取行动的原因。

于 2013-07-11T20:48:49.027 回答