更新时间:2022-11-06 18:26:49
您必须使用客户端的 PageRequestManager
妥善处理AJAX提交事件。 (如prevent一个异步回发。)
You have to use the client side PageRequestManager
to properly handle AJAX submit events. (e.g. prevent an async postback.)
如果你是不是在页面的总量控制,有可能只是调用 __ doPostBack页面()
JavaScript的没有经过任何页面逻辑去。
在这种情况下 - 除了上面 - ,你要存储旧窗口.__ doPostBack()
,并提供自己的 - 在他的评论中提到@tucaz。
(......正如你提到的,它可以得到相当链接傻了眼。)
对于定期提交(非Ajax),可以提供事件处理程序,其他人指出。
If you are not in total control of the page, there can be JavaScript on the page that just calls __doPostBack()
without going through any page logic.
In this case - in addition to the above -, you have to store the old window.__doPostBack()
and provide your own - as @tucaz mentioned in his comments.
(...and as you mentioned, it can get quite perplexing with chaining.)
For regular submits (non-AJAX), you can provide an event handler as others have pointed out.
本页面可能会有所帮助并具有一定的code样品使用 PageRequestManager
。特别是:
This page might be of help and has some code samples that use PageRequestManager
. In particular:
initialize : function()
{
...
this._onSubmitHandler = Function.createDelegate(this, this._onSubmit);
this._onPartialUpdateEnd = Function.createDelegate(this, this._onUpdateEnd);
if (typeof(Sys.WebForms)!== "undefined" && typeof(Sys.WebForms.PageRequestManager)!== "undefined")
{
Array.add(Sys.WebForms.PageRequestManager.getInstance()._onSubmitStatements, this._onSubmitHandler);
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(this._onPartialUpdateEnd);
}
else
$addHandler(document.forms[0], "submit", this._onSubmitHandler);
},
修改:
按照上面的,这一点,例如工作正常,我(.NET 3.5 SP1, Button1的
是UpdatePanel的触发器,等...):
Edit:
Following the above, this, for example works fine for me (.Net 3.5 SP1, Button1
is trigger in the updatepanel, etc...):
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<script src="http://ajax.microsoft.com/ajax/jQuery/jquery-1.4.2.js" charset="utf-8"
type="text/javascript"></script>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<div>
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
</div>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Button1" />
</Triggers>
</asp:UpdatePanel>
</form>
<script type="text/javascript">
(function($, undefined) {
var submitHandler = function(e) {
return false;
}
if (typeof (Sys.WebForms) !== "undefined" && typeof (Sys.WebForms.PageRequestManager) !== "undefined") {
Array.add(Sys.WebForms.PageRequestManager.getInstance()._onSubmitStatements, submitHandler);
} else {
$("form").submit(submitHandler);
}
})(jQuery);
</script>
</body>
</html>