执行jQuery,然后执行.NET
本文关键字:执行 NET 然后 jQuery | 更新日期: 2023-09-27 18:20:48
如何让asp:按钮在执行.net代码之前执行一些jquery?
我基本上有一个asp:button,它附带了一些jquery ajax和一些.NET代码。我注意到,如果jquery很简单,比如显示警报,一切都可以,但如果jquery更复杂,即ajax,它必须去连接数据库,它似乎不起作用,它只执行.NET.
我想这和速度有关吧?.NET代码在jQuery脚本完成之前启动?
所以我的问题是,我该如何设置它,这样当点击asp:按钮时,jquery就会做它自己的事情,一旦jquery完成,.net部分就会运行?
尝试使用OnClientClick方法,如果返回false,它将停止回发。
http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.button.onclientclick.aspx
<asp:Button id="btn" runat="server" OnClientClick="return onclick()" text="Click" />
JavaScript:
function onclick()
{
// do something
return false; // this will stop the postback
}
Praveen关于异步或同步的观点(下面,向下投票)在这里非常重要。
"OnClientClick"答案只适用于同步内容。如果你有AJAX或Promise,我发现的最好的模式是:
1) 。使用javascript:停止按钮的默认行为
OnClientClick="return false;"
2) 。为按钮创建一个单独的Javascript事件处理程序:
$(document).ready(function (e) {
$("[id$='btn']").click(function(){
3) 。调用客户端ASP验证器(如果没有,请跳过)。
if (Page_ClientValidate())
{
4) 。到AJAX完成函数,或者在promise.then()中传递一个函数来提交触发按钮点击事件的表单
__doPostBack('<%= btn.ClientID %>', 'OnClick');
除非你正在处理Promises或AJAX,否则这一切看起来都很复杂。
以下是完整的示例页面:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="aaaaa_test.aspx.cs" Inherits="test" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function (e) {
//2). use the click event to capture the canceled submit.
$("[id$='cmdSubmit']").click(function(){
//3). Allow the asp client-side page validators to do their thing...
if (Page_ClientValidate())
{
ReturnsPromise().then(function () {
//4). once the Asynchronous stuff is done, re-trigger the postback
// and make sure it gets handled by the proper server-side handler.
__doPostBack('<%= cmdSubmit.ClientID %>', 'OnClick');
});
}
});
// very simple promise, usually this woud be an AJAXy thing.....
// a placeholder for your real promise.
function ReturnsPromise()
{
//this is just a simple way to generate a promise for this example.
return Promise.resolve($("[id$='hiddenField']").val($("[id$='txtInput']").val()));
}
});
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:HiddenField ID="hiddenField" runat="server" />
Input:<asp:TextBox ID="txtInput" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="valInput" runat="server" ErrorMessage="Add Text" ControlToValidate="txtInput" EnableClientScript="True" Text="Add Text"></asp:RequiredFieldValidator>
<br />
<!-- 1). use client script to stop the default button behavior with OnClientClick="return false;" -->
<asp:Button ID="cmdSubmit" runat="server" OnClick="cmdSubmit_Click" Text="Submit" OnClientClick="return false;" />
</div>
</form>
</body>
</html>
- 第一件事是ajax调用async还是sync?您将使用defer和promise概念进行ajax调用
2、创建一个隐藏按钮,ajax调用成功后点击jquery中的按钮。和real按钮返回false,因此它不会执行回发。