为特定异步回发赋予优先级

默认情况下,当某个页同时生成多个异步回发时,最近生成的回发将优先。某些情况下,可以为特定的异步回发赋予优先级并取消其他回发。

先决条件

若要在您自己的开发环境中实现这些过程,您需要:

Microsoft Visual Studio 2005 或 Microsoft Visual Web Developer 速成版。

一个支持 AJAX 的 ASP.NET 网站。

创建用于为特定回发元素赋予优先级的脚本

首先,创建用于管理浏览器中的异步回发的 ECMAScript (JavaScript) 代码。

创建用于为特定回发元素赋予优先级的脚本

在 ASP.NET 网站中,添加 JScript 文件并将其命名为 PostbackPrecedence.js。

向文件中添加以下脚本:

Sys.Application.add_load(ApplicationLoadHandler)
function ApplicationLoadHandler(sender, args)
{
   if (!Sys.WebForms.PageRequestManager.getInstance().get_isInAsyncPostBack())
   {
    Sys.WebForms.PageRequestManager.getInstance().add_initializeRequest(InitializeRequest);
   }
}

var divElem = 'AlertDiv';
var messageElem = 'AlertMessage';
var exclusivePostBackElement = 'Button1';
var lastPostBackElement;
function InitializeRequest(sender, args)
{
   var prm = Sys.WebForms.PageRequestManager.getInstance();
   if (prm.get_isInAsyncPostBack() &&
     args.get_postBackElement().id === exclusivePostBackElement)
   {
     if (lastPostBackElement === exclusivePostBackElement)
     {
      args.set_cancel(true);
      ActivateAlertDiv('visible', 'A previous postback is still executing. The new postback has been canceled.');
      setTimeout("ActivateAlertDiv('hidden','')", 1500);
     }
     else if (lastPostBackElement !== exclusivePostBackElement)
     {
      prm.abortPostBack();
     }
   }
   else if (prm.get_isInAsyncPostBack() &&
        args.get_postBackElement().id !== exclusivePostBackElement)
   {
     if (lastPostBackElement === exclusivePostBackElement)
     {
       args.set_cancel(true);
       ActivateAlertDiv('visible', 'A previous postback is still executing. The new postback has been canceled.');
       setTimeout("ActivateAlertDiv('hidden','')", 1500);
     }
   }
   lastPostBackElement = args.get_postBackElement().id;
}

function ActivateAlertDiv(visString, msg)
{
    var adiv = $get(divElem);
    var aspan = $get(messageElem);
    adiv.style.visibility = visString;
    aspan.innerHTML = msg;
}
if(typeof(Sys) !== "undefined") Sys.Application.notifyScriptLoaded();

时间: 2024-10-03 09:05:04

为特定异步回发赋予优先级的相关文章

取消异步回发

通过使用页上的NET UpdatePanel Web 服务器控件,可以在 ASP.NET 中实现异步回发. UpdatePanel 控件不再需要在每次回发时刷新整个页面,这样将改善用户体验.在浏览器中, Microsoft AJAX Library 中的Sys.WebForms.PageRequestManager 类在客户端页生命周期中管 理事件以进行异步回发.可以通过处理 PageRequestManager 类公开的事件来自定义异步回发 出现的方式. 先决条件 若要在您自己的开发环境中实现

updatepanel-asp.net4 imagebuttn 异步回发问题

问题描述 asp.net4 imagebuttn 异步回发问题 iis 服务器安装asp.net4 ,imagebutton 在updatepanel下做异步回发,点击imagebutton按钮不回发,button就没有这个问题,请问如何解决呢? 解决方案 不回发的话,强制回发试试: ScriptManager1.RegisterPostBackControl(imgbtn_up); 如果是客户端弹出提示的话,代码如下所示: ScriptManager.RegisterStartupScript

ASP.NET服务器控件封装-【事件】-1.1【事件回发.异步回调】

最近,正在学习ASP.NET服务器控件封装相关的知识,把自己学到的和大家分 享下. 本次内容的概要如下: 1.事件以及为什么需要事件驱动机制: 2.回发的原理: 3.异步回调的原理: 4.事件回发的实现: 5.异步回调的实现. 了解了本次内容的概要,接下来就分节次说明了. 1.事件以及为什么需要事件驱动机制 在C#语言详解一书中对事件的定义是"事件是一种使对象或类能够提供通知的 成员",在这里换句话 说就是页面中已注册事件的对象能够对用户的操作进行捕获并处理.那么为什么 需要引用事件机

ASP.NET服务器控件封装-【事件】-1.2【数据回发】

上节概述: 上节中主要总结了事件处理的机制.控件事件回发.服务端回发事件的捕获及 处理和异步回调等几个方面. 接下来本文将为大家描述"数据回发"的相关细节. 1.IPostBackDataHandler接口 我们封装的控件如果要实现数据回发功能的话,就必须继承 IPostBackDataHandler接口并实现接口方法.该接口方法只有两个: 代码 1 #region IPostBackDataHandler 成员 2 public bool LoadPostData(string po

请教怎么防止支付后网银或者支付宝多次回发

问题描述 最近在做支付,但是遇到了一个问题,不管是支付宝还是其他网银支付,付款成功后,他们都会发多次结果,支付宝和银联或招行支付,都要连续发5次支付结果来,然后我后台就处理五次支付结果,这样照成了我多次确认付款,我也做了验证,就是每次收到结果的时候先去判断这条记录是否被处理,如果没有处理,就先写入数据库,然后在做处理,但是每次支付结果回调都间隔时间都很短,照成我数据都还没有写完,已经处理了5次数据了,请问各位是怎么处理支付回调的? 解决方案 解决方案二:应该先判断订单号,重复的将会过滤,这样就可

运行page页面时的事件执行顺序及页面的回发与否深度了解_实用技巧

复制代码 代码如下: using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; pub

asp.net Page.EnableEventValidation 属性验证服务器控件的回发和回调事件出现的错误

本以为页面很简单不会出现问题,但运行时出现了如下错误: Page.EnableEventValidation 属性 参看了一下MSDN,获取或设置一个值,该值指示页面验证回发事件,还是验证回调事件..NET Framework出于安全考虑需要为服务器端控件的回发和回调事件进行注册,此事件验证机制可消除未经授权的回发请求和回调带来的风险.通过此模型,控件可在呈现期间注册其事件,然后在回发或回调期间验证这些事件.默认情况下,ASP.NET 中的所有事件驱动控件均使用此功能. 第一反应,既然启用了事件

数据回发时,维护ASP.NET Tree控件位置

asp.net|控件|数据 ASP.NET2.0提供了一个功能强大的TreeView控件,但是它看起来有一个缺陷:它好像不能够跟踪用户最后选择的一个节点.如果你滚动到第50个节点然后展开该节点,那么当单击链接页面进行回发后,你必须重新利用滚动条下拉到你想要的节点位置. 在.NET较早的版本里,您可能考虑使用SmartNavigation这个特性.SmartNavigation是Web页面指令的一个属性,它的取值为布尔值,一个设置为true的页面指令看起来类似如下: <%@ Page Langua

GridView动态创建列回发再绑定的解决

先贴代码: protected void Page_Load(object sender, EventArgs e) { this.gvCon.MyBind+=new MyGridView.MyBind_Delegate(Bind); //这一句不用管 !,MyGridView 的需要! if (Page.IsPostBack == false) { Bind(); } } 在 Bind 函数的动态绑定 编辑列. 当点 编辑时, 可以改变为 编辑样式, 但是, 当点击 Update 或 Canc