首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >阻止ASP.net __doPostback()在UpdatePanel内提交jQuery ()

阻止ASP.net __doPostback()在UpdatePanel内提交jQuery ()
EN

Stack Overflow用户
提问于 2010-03-11 18:59:07
回答 2查看 11.6K关注 0票数 5

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

有没有办法防止__doPostback()函数从submit()函数内部结束?

我曾假设:

代码语言:javascript
复制
$('#aspnetForm').submit(function () { return false; });

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

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

干杯,艾德

编辑

好吧,我很快就弄乱了,发现我用来引发回发的按钮被绑定到一个updatepanel作为异步回发触发器,这似乎是问题所在:如果我把它作为触发器移除(也就是让它产生一个完整的回发),用return false阻止回发是没有问题的;

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-03-11 20:21:25

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

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

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

代码语言:javascript
复制
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中的触发器,等等):

代码语言:javascript
复制
<%@ 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>
票数 5
EN

Stack Overflow用户

发布于 2010-03-11 19:00:59

代码语言:javascript
复制
$('#yourPostButton').click(function(){  
    return false; 
});

这应该可以了!

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2424327

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档