在UpdatePanel中从jQuery submit()中防止ASP.net __doPostback()

时间:2010-03-11 10:59:07

标签: asp.net jquery forms asp.net-ajax updatepanel

如果我的自定义jQuery验证返回false,我正试图在表单提交上停止回发。

有没有办法阻止__doPostback()函数在submit()函数内完成?

我假设:

$('#aspnetForm').submit(function () { return false; });

可以做到这一点,但显然事实并非如此:有没有人有建议?

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

干杯,艾德

修改

好吧,我快速搞砸了,并发现我用来导致回发的按钮与更新面板绑定的事实似乎是asyncpostbacktrigger问题:如果我将其作为触发器删除(即导致它产生一个完整的回发),没有问题阻止回发返回false;

为什么使用return false会导致异步回发不能停止?

2 个答案:

答案 0 :(得分:5)

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

如果您无法完全控制页面,则页面上可能会有JavaScript,只需调用__doPostBack()而无需通过任何页面逻辑。 在这种情况下 - 除上述之外 - 你必须存储旧的window.__doPostBack()并提供你自己的 - 在他的评论中提到的@tucaz。 (......正如你所提到的,链接会让人感到非常困惑。) 对于常规提交(非AJAX),您可以像其他人指出的那样提供事件处理程序。

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

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等触发...):

<%@ 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>

答案 1 :(得分:3)

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

这应该做!