我的aspx文件中有以下代码:
<button type="button" id="btnAskQuestion" runat="server" onserverclick="btnAskQuestion_Click">Ask Question</button>
我已经尝试了我能想到的onclick="return false;"
和onclick="preventDefault()"
的每个组合,包括将它们放入被调用的javascript函数中。我尝试的所有内容都有两个结果之一:要么我得到回发,要么服务器端代码(btnAskQuestion_Click)永远不会执行。
知道我可能做错了吗?
答案 0 :(得分:5)
您不能以这种方式执行服务器端代码,使用onserverclick
会导致回发。
如果您希望阻止整页刷新并仍然执行服务器端代码,则必须通过onclick
调用客户端JS函数并从那里执行AJAX调用。
另一种方法是使用您的按钮作为UpdatePanel的触发器 - 这样只会执行部分回发。
答案 1 :(得分: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来执行逻辑。您可以触发单击按钮,在服务器中执行某些操作。
答案 2 :(得分:2)
在服务器上触发 OnClick ,在客户端浏览器上触发 OnClientClick 。你应该这样做:
<asp:Button ID="btnAskQuestion" runat="server"
OnClick="btnAskQuestion_Click"
OnClientClick="return myfunction();">Ask Question</asp:button>
如果myFunction返回true,那么您将回发到服务器。
答案 3 :(得分:1)
我的回答仅适用于ASP:Button
,而不适用于您正在使用的按钮控件。如果有选择,我会切换到ASP:Button
。
您正在寻找OnClientClick
。如果你把JavaScript代码放在那里,它会杀掉PostBack,然后它才能进入服务器。
另一方面,如果你想在没有PostBack的情况下执行服务器代码,那是不可能的。 PostBack是触发服务器行动的原因。