【问题标题】:asp.net How to resume button's postback after ajax completion?asp.net ajax 完成后如何恢复按钮的回发?
【发布时间】:2014-02-18 19:18:17
【问题描述】:

我有一个按钮,并在后面的代码中具有 btnSubmit.Click 的回发功能。

<asp:Button runat="server" ID="btnSubmit" Text="Submit"  UseSubmitBehavior="true" OnClientClick="ajaxCall(); return false;" />

现在,我想做一个 pre-post 动作,它会调用一个 ajax 来做一些计算,并有一个确认框允许用户点击“Ok” - 恢复原始按钮的功能做回发,或者“ Cancel" - 只需取消回发即可。

    <script type="text/javascript" language="javascript">
    function ajaxCall() {
            $.ajax({
                dataType: 'json',
                type: 'GET',
                contentType: "application/json; charset=utf-8",
                url: "ODS.aspx/ClientCall",
                success: function (msg) {
                    alert(msg);
                }, error: function (data) {
                    alert(data);
                }
            });
    }
</script>

我一直要么只触发确认框,但“确定”不起作用,或者回发将通过 ajax。我知道必须有一个聪明的方法来做到这一点,中断正常的按钮提交回发行为,但不想引入更多的控件,比如 hiddenbutton 之类的东西,感觉很hacky。有什么想法吗?

【问题讨论】:

    标签: c# asp.net ajax vb.net button


    【解决方案1】:

    我不知道天气会不会解决你的问题,但你可以使用 ajaxStart 和 ajaxStop 方法,在这些方法中你可以编写你的确认逻辑..

    【讨论】:

    • 这些都是为了ajax函数,但是我想在ajax完成后调用初始按钮的回传函数,所以ajax函数只是提交前检查什么的。
    【解决方案2】:

    ajaxStart 和 ajaxStop 和 jquery .after() 的另一个选项。

    如果您要使用 ASP:LinkBut​​ton,您可以将 href 属性存储在变量中,当客户端单击时将其删除,当您需要执行时只需执行 eval([HREFVariable])。

    这是凭记忆,但我会在一分钟内查一下:

    $('a.whatever').on("click", function(){
    e.preventDefault();//stop the post back
    var defaultAction = $(this).prop("href");
    
    //do stuff
    
    //you are ready now
    eval(defaultAction);
    
    });
    

    这是可行的,因为 ASP.Net 会在 href 中进行回发,例如 javascript:__doPostBack(...);

    所以这只是调用你要执行的函数。

    Edit 2既然你想留在asp:button

    这样的东西应该可以工作

    $('a.whatever').on("click", function(){
        e.preventDefault();//stop the post back
        var id = $(this).prop('id');
    
    
        //do stuff
    
    //you are ready now
    __doPostBack(id, '');
    
    });
    

    我猜这部分。这应该会触发正确的帖子,但我尚未对其进行测试。

    【讨论】:

    • 如果它只是一个普通按钮,而不是任何链接按钮怎么办?所以问题是如何在 ajax 完成后重新调用回发功能,我可以通过执行 e.preventdDefault() 来停止发布。
    • 我为 ASP:Button 更新了它,我认为它应该可以工作。
    • 不知何故它没有在回发中影响我的事件委托,它现在进行回发......有线......
    • 是的,因为 __doPostBack 的第二部分是事件参数。我想弄清楚如何触发点击事件。它可能只是“点击”。
    • 我想我知道出了什么问题 $(this).prop('ID') 应该是 $(this).prop('id')。 jQuery.prop 区分大小写。我的坏。
    猜你喜欢
    • 2011-06-23
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 2021-12-15
    • 1970-01-01
    • 1970-01-01
    • 2014-07-25
    • 2010-12-21
    相关资源
    最近更新 更多