防止来自__doPostBack的完整回发

我有一个内容页面,其中包含以下内容……

  1. UpdatePanel1 – 包含错误显示Div
    包含两个按钮的更新触发器
  2. UpdatePanel2 – 包含带有asp:按钮的进程1
  3. updatePanel3 – 包含带有asp:按钮的进程2
  4. 向用户显示Popup的JavaScript根据正在执行的进程确认Jquery Messagebox。

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

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

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

我宁愿页面进行部分回发及其拥有的内容,如果出现错误则显示错误显示分区。 任何援助将不胜感激。

按钮没什么特别的

 

这是内容页面脚本块

     

这是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(); }; } 

定义下面的函数并用doPostBackAsync(controlId, null)替换__doPostBack调用。

 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); } 

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

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

检查一下吗?

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

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