ASP.NET AJAX:编写组件,使用JavaScript更新UpdatePanel

众所周知,UpdatePanel是通过Trigger来更新的。被设定为Trigger的控件在PostBack之后会被客户端 所截获,并且使用XMLHttpRequest对象发送内容,然后服务器端由ScriptManager配合,改变Page对象的 输出,最后得到部分刷新的效果。但是有时候我们可能需要使用JavaScript来刷新UpdatePanel,这时候 就不太方便了。

当然,我们又一个属于Workaround的方法,那就是使用JavaScript来模拟按钮的点击。我们往往会将 一个按钮设为某个UpdatePanel的Trigger,然后在客户端模拟它的点击(我后面会提到,其实这是一个比 较糟糕的做法,没有必要),使UpdatePanel进行更新。但是这样的做法实在太麻烦了些,也相当的不优 雅。

现在我们就来编写一个组件解决这个问题。这个组件的名字叫做JavaScriptUpdater,似乎取得不怎么 样——我一直不擅长取名。

首先来定一个需求吧

我们的目的,其实就是为了在客户端生成一个JavaScript代理,提供一个方法,调用它之后能够刷新 页面。如果一个UpdatePanel的UpdateMode为Always,那么它一定会更新。如果需要更新UpdateMode为 Conditional的UpdatePanel,就需要通过在页面中编写tag来设定哪些UpdatePanel也会被更新。我们需要 尽可能的把编程工作变得最小。

不如我们先考虑使用方式,我们编写的这个JavaScriptUpdater在页面中可以这样使用:

JavaScriptUpdater使用方式

<helper:JavaScriptUpdater runat="server" ID="Updater" MethodName="Refresh"
   ResolveUpdatePanel="OnResolveUpdatePanel" Enabled="True">
   <UpdatePanels>
     <helper:UpdatePanel UpdatePanelID="UpdatePanel1" />
     ...
   </UpdatePanels>
</helper:JavaScriptUpdater>

JavaScriptUpdater有一个简单属性MethodName,表明了在客户端生成代理方法的名字。再上例中该属 性为Refresh,表明我们会调用UpdatePanels.Refresh()方法进行UpdatePanel更新。UpdatePanels是一个 集合属性,可以指定哪些UpdateMode为Conditional的UpdatePanel一同进行更新。如果某个 UpdatePanelID没有找到的话,就会调用ResolveUpdatePanel事件,让用户来指定一个UpdatePanel。还有 一个Enabled属性,用于控制该JavaScriptUpdater是否生效。

一个页面里能够放置多个JavaScriptUpdater,这样可以生成多个JavaScript代理方法。这样的设定, 应该已经足够用了。

实现JavaScriptUpdater

自然,我们先定义最简单的两个类,UpdatePanelHelper.UpdatePanel类,和 ResolveUpdatePanelEventArgs类。由于实在简单,就直接贴一下代码了:

时间: 2024-10-26 14:40:56

ASP.NET AJAX:编写组件,使用JavaScript更新UpdatePanel的相关文章

ASP.NET AJAX Advance Tips &amp;amp; Tricks (5) UpdatePanel与jQuery

前言 现在越来越多的朋友喜欢将jQuery和ASP.NET AJAX 一起来用,最近,许多印度人在forum里抱怨说 UpdatePanel和jQuery不兼容,许多jQuery效果在UpdatePanel更新之后就不work.本篇通过分析两者的框 架结构来解决这个兼容性问题. 问题重现: 1.在页面中添加ScriptManager和UpdatePanel 2.在UpdatePanel中添加元素A 3.用jQuery对元素A添加X效果 4.在UpdatePanel中加一个ButtonB用作pos

asp.net ajax学习系列功能强大的UpdatePanel控件

ajax|asp.net|控件 先给一个简单的例子,后面给一个比较复杂的例子. 改进后的UpdatePanel使页面部分更新(Partial-Page Updates)实现起来非常容易.要想在已有web页面或新建页面中加入部分更新内容,都十分容易,下面几个步骤:<1>在页面中加入ScriptManager控件.并保证ScriptManager控件的EnablePartialRendering属性值为true.若EnablePartialRendering=false,那么下面所做的对页面部分更

【转】了解使用 ASP.NET AJAX 进行局部页面更新

简介 Microsoft的 ASP.NET 技术提供了一个面向对象.事件驱动的编程模型,并将其与已编译代码的优势结合起来.但其服务器端的处理模型仍存在技术本身所固有的几点不足: 进行页面更新需要往返服务器,因此需要页面刷新: 来回往返不会保留 Javascript 或其他客户端技术(如 Adobe Flash)生成的任何效果. 在回传过程中,除 Microsoft Internet Explorer 之外的浏览器都不支持自动存储滚动位置.而即使在Internet Explorer 中,页面刷新时

创建定制的ASP.NET AJAX非可视化客户端组件

作者基于对微软ASP.NET AJAX 1.0框架的研究,本文继续讨论如何创建一个由基类Sys.Component派生的ASP.NET AJAX非可视化客户端组件,并展示它在Web页面中的用法. 一.简介 在本文中,我们将共同讨论如何创建一个由基类Sys.Component派生的ASP.NET AJAX非可视化客户端组件,并将展示它在Web页面中的用法. 具体说来,你将学习如何实现: ◆使用prototype设计模式以JavaScript定义一个非可视化组件类. ◆把一个非可视化组件注册为一个由

ASP.NET AJAX:UpdatePanel提示和技巧

目录 更新突出显示 取消 UpdatePanel 更新 多个 UpdatePanel 不使用 UpdatePanel 更新 Web Service != SOAP 和 XML 不论好坏,UpdatePanel 控件都是 ASP.NET AJAX 社区所喜爱的.我说"好",是因为 UpdatePanel 使部分页面呈现变得相当 简单,而说"坏",是因为它的简便和易用性是以效率和令人啼笑皆非的带宽为代价的. UpdatePanel 可以为一般的网页带来 AJAX 神奇的

ASP.NET AJAX客户端编程之旅(六)——来做一个自己的客户端控件

通过前面的文章,我们了解了ASP.NET AJAX框架的很多知识.在这一篇文章中,我们来做一个自己的ASP.NET AJAX客户端控件:PasswordValidator.这个控件关联到的DOM元素是一个span或div,并且关联到一个password类型的input标签,当用户在input中输完密码并且这个input失去焦点时,检测用户输入的密码是否合理,如果合理,则给出这个密码的安全程度. 从这一篇开始,将使用VS2008作为IDE,请朋友们注意. 建立AJAX客户端控件控件的骨架 在以前的

在PHP中使用ASP.NET AJAX

在PHP中使用ASP.NET AJAX 编写Service文件 新建一个php文件,命名为EmployeeService.php.首先写上这一句,include必要的支持代码: require_once 'MSAjaxService.php'; 然后定义一个Employee类.四个属性一目了然,不用多说: class Employee { public $Id; public $Name; public $Email; public $Salary; function __construct($

Delphi编写组件封装asp代码的基本步骤

如果你想脱离asp爱好者的水平,那么你就应该学会为asp编写组件.我在google上搜索了一下,Delphi编写asp组件的文章一共就几篇,所以今天写了这篇Delphi编写asp组件的基础文章,希望对新手有点帮助.    开始吧,让我们一起编写一个"hello world!"的示例.我这里用的是Delphi 7.     1.文件->新建->其他->ActiveX->ActiveX Library,然后保存成showdll.dpr 2.再次,文件->新建-

ASP.NET AJAX Advance Tips &amp;amp; Tricks (3) JavaScript与Tab的交互

前言 ASP.NET AJAX Control Toolkit 中的Tab控件非常简单易用,对服务端和客户端的支持都非常不错. 本篇通过几个FAQ给大家介绍Tab和JavaScript的常用交互,以及应该注意到的问题. 1. TabCantainer的JavaScript接口 目前的Tab控件很多,而Altas的Tab控件有点在于JavaScript接口非常丰富,而且非常便于理解和使用 ,一般常用的有以下几组: get_headerText//获取标题文字 set_headerText//设置标