2

我有一个包含以下内容的页面...

  1. UpdatePanel1 - 包含 Error Display Divs
    包含两个按钮的更新触发器
  2. UpdatePanel2 - 包含带有 asp:button 的进程 1
  3. updatePanel3 - 包含带有 asp:button 的进程 2
  4. 向用户显示弹出窗口的 JavaScript 根据他们正在执行的过程确认 Jquery 消息框。

UpdatePanel 2 或 3 根据用户从菜单选项中的选择变为可见。

选择菜单项 2 将显示此页面并显示错误消息

当我单击一个按钮时,会弹出消息框,并使用消息框响应中的 __doPostback 正确处理页面,并且页面会执行完整的回发。

我宁愿页面做部分回发和它拥有的内容,如果有错误,显示错误显示 Divs。任何援助将不胜感激。

按钮没什么特别的

<asp:Button ID="ResetSomething" runat="server" Text="ResetSomething" Width="275px" />

这是内容页面脚本块

    <script type="text/javascript" language="javascript">
<!--
    function pageLoad() {
        setform();

    };

    function setform() {
        var reset1_button = $('input[id*=ResetSomething]');
        var reset2_button = $('input[id*=ResetSomethingElse]');

        reset1_button.click(function() {
            var element = $(this);
            $.prompt('Message1', { show: 'slideDown', buttons: { Ok: true, Cancel: false },
                submit: function(v, m, f) { submit_reset_callback(v, m, element); }
            });
            return (false);
        });

        var submit_reset_callback = function(result, messages, element) {
            if (result) { __doPostBack("ResetSomething");}
            return (false);
        };

        reset2_button.click(function() {
            var element = $(this);
            $.prompt('Message2', { show: 'slideDown', buttons: { Ok: true, Cancel: false },
                submit: function(v, m, f) { submit_update_callback(v, m, element); }
            });
            return (false);
        });

        var submit_update_callback = function(result, messages, element) {
            if (result) { __doPostBack("ResetSomethingElse"); }
            return (false);
        };
    };     
-->
</script>

这是 OnInit 背后的代码:

    protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);
        this.PreLoad += (sender, args) =>
                            {

                                this.ClientScript.GetPostBackEventReference(this, "arg");

                                if (!IsPostBack) { return; }

                                string __targetaction = this.Request["__EVENTTARGET"];
                                string __args = this.Request["__EVENTARGUMENT"];

                                if (string.IsNullOrEmpty(__args)) return;

                                if (__targetaction == "ResetSomething")
                                {
                                    ResetSomething();
                                }
                                if (__targetaction == "ResetSomethingElse")
                                {
                                    ResetSomethingElse();
                                }
                                this.upnlNotifications.Update();
                            };
    }
4

2 回答 2

3

定义下面的函数并将您的__doPostBack调用替换为doPostBackAsync(controlId, null).

function doPostBackAsync(eventName, eventArgs) {
    var prm = Sys.WebForms.PageRequestManager.getInstance();

    if (!Array.contains(prm._asyncPostBackControlIDs, eventName)) {
        prm._asyncPostBackControlIDs.push(eventName);
    }

    if (!Array.contains(prm._asyncPostBackControlClientIDs, eventName)) {
        prm._asyncPostBackControlClientIDs.push(eventName);
    }

    __doPostBack(eventName, eventArgs);
}
于 2011-07-29T14:48:11.147 回答
0

controlId 应该是生成异步回发的按钮的 ID,否则页面中会发生完整的回发。为此,您可以将 clientidmode 用作静态,例如

<asp:Button ID="button1" runat="server"  ClientIDMode="Static"/>

   //then you can use below code
   _doPostBack('button1', '');//clientidmode forces buttonid = id given by us

检查它的正确性?

如果是这样,那么您可以获得异步回发而不是整页回发。

这对我有帮助。感谢@Tim 的评论。

于 2014-08-12T15:16:17.803 回答