在UpdatePanel中阻止ASP.net _udoPostBack()从jQuery提交()

在UpdatePanel中阻止ASP.net _udoPostBack()从jQuery提交(),asp.net,jquery,forms,asp.net-ajax,updatepanel,Asp.net,Jquery,Forms,Asp.net Ajax,Updatepanel,如果自定义jQuery验证返回false,我将尝试停止表单提交上的回发 是否有任何方法可以防止_doPostback()函数在submit()函数中完成 我假设: $('#aspnetForm').submit(function () { return false; }); 这会起作用,但显然不是这样:有人有建议吗 submit()函数确实会阻止回发(如果您在firebug中的断点处暂停,它将不会回发),但在submit()函数完成后,我似乎无法阻止事件发生 干杯,艾德 编辑 好吧,我很快就搞

如果自定义jQuery验证返回false,我将尝试停止表单提交上的回发

是否有任何方法可以防止_doPostback()函数在submit()函数中完成

我假设:

$('#aspnetForm').submit(function () { return false; });
这会起作用,但显然不是这样:有人有建议吗

submit()函数确实会阻止回发(如果您在firebug中的断点处暂停,它将不会回发),但在submit()函数完成后,我似乎无法阻止事件发生

干杯,艾德

编辑

好吧,我很快就搞砸了,发现我用来导致回发的按钮作为asyncpostbacktrigger绑定到updatepanel上,这似乎是个问题:如果我将其作为触发器删除(即,使其生成完整的回发),则使用return false阻止回发没有问题

你知道为什么异步回发不能使用return false停止吗

$('#yourPostButton').click(function(){  
    return false; 
});

这应该够了

您必须使用客户端来正确处理AJAX提交事件。(例如,防止异步回发。)

如果您不能完全控制页面,那么页面上可能有JavaScript只调用
\uuu doPostBack()
,而不经过任何页面逻辑。 在这种情况下,除了上述内容之外,您还必须存储旧的
窗口。uu doPostBack()
,并提供您自己的窗口,如他在评论中提到的@tucaz。 (…正如您所提到的,链接可能会让人非常困惑。) 对于常规提交(非AJAX),您可以像其他人指出的那样提供事件处理程序

可能会有所帮助,并且有一些使用的代码示例。特别是:

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中的触发器,等等):


(函数($,未定义){
var submitHandler=函数(e){
返回false;
}
if(typeof(Sys.WebForms)!=“未定义”&&typeof(Sys.WebForms.PageRequestManager)!=“未定义”){
add(Sys.WebForms.PageRequestManager.getInstance()。_onSubmitStatements,submitHandler);
}否则{
$(“表格”)。提交(提交人);
}
})(jQuery);

是的,但是我需要将其附加到表单上的每个按钮上,这不是很明智。我需要能够使用submit()(或其他等效工具)来完成此操作,这样我就可以使用使用代码的控件,而不必逐页进行配置。如果这对您来说不是问题,您可以使用$('input[type=button]”或类似的工具将其添加到每个按钮,或者尝试使用.preventDefault()正如jQuery文档所建议的那样,这里的另一个想法是获取一个对原始uu doPostBack函数的引用,如果您想中断回发,则将其替换为一些伪函数。类似这样的东西:var uu oldPostBack=uu doPostBack__doPostBack=function(){//检查是否可以post,然后调用_oldPostBack()}是的,选择器为true,但在ASP.net中,任何东西都可能导致回发,例如dropdownlist selectedindexchanged(我们经常使用的一个),因此我必须根据输入类型绑定各种事件,这有点过于复杂。对于preventDefault(),return false会自动调用此函数,正如您可以看到的那样,如果您多次尝试使用firebug.chaining\u doPostBack进行返回,则会出现一些问题,这意味着当需要多个控件向\u doPostbackYes添加功能时,会变得非常复杂,我已经阅读了UpdatePanel文档,似乎可以使用PageRequestManager.getInstance().abortPostBack()取消异步回发。但是,这似乎无法正常工作:my submit()处理程序不再阻止回发。@Ed Woodcock:通过查看源代码和找到的文章(例如on),abortPostBack()用于取消已启动的请求。
<%@ 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>