Anthem.net

http://baike.baidu.com/view/1482185.htm-

Anthem.net是一种新的AJAX技术,它主要是提供了一个新控件库,库中包含了大量常用控件,如Button、Calendar、CheckBox等等,到目前为止为ASP.NET提供了24种新控件,实用于ASP.NET 1.0 和 ASP.NET 2.0 。

  Anthem.net的所有技术都是开源的,源代码下载地址为http://nchc.dl.sourceforge.net/sourceforge/anthem-dot-net/anthem-1.1.0.zip

  Anthem.net技术的原理简单介绍:

  让每个控件都有独立的信息提交能力,

  比如在一个Button的Click事件中

  private void Button1_Click(object sender, System.EventArgs e)

  {

  TextBox1.Text = "OK";

  TextBox1.UpdateAfterCallBack = true;

  }

  运行的页面上,你看不到刷新,TextBox1就改变了。

  其实在编译的过程中,由于我们使用的是Anthem.net控件,它会自动产生大量的javascript脚本,来实现异步交互。

  那么我们只需要和往常一样在后台中写每个事件下的操作,至于是不是异步交互,我们都不用管了。

  不足的是,这个开源技术目前只是1.0版本,目前只有24种可用控件,自定义控件不能直接实现独立提交的接口。

  和传统的ajax技术相比,它有以下优点:

  1、不需要任何技术升级,以前不会使用ajax技术的人员,按照以往的编程方式就可实现异步交互

  2、支持ASP.NET 1.0 和 ASP.NET 2.0

  3、开源技术,如果深入研究,也能开发出自己的控件

  Anthem.NET的Callback方式。

  一、普通的调用

  <%@ Register TagPrefix="anthem" Namespace="Anthem" Assembly="Anthem" %>

  <anthem:Button id="button" runat="server" Text="Click Me!" />

  <anthem:Label id="label" runat="server" />

  <script runat="server">

  void button_Click(object sender, EventArgs e) {

  label.Text = DateTime.Now.ToString();

  label.UpdateAfterCallBack = true;

  }

  </script>

  二、在回调前后添加自定义客户端函数的执行逻辑

  几个常用的属性:

  PreCallBackFunction:用于定义回调前执行的函数,通常可以在这里加入确认的判断。

  在这个函数里 return false 将会取消回调。

  PostCallBackFunction: 回调后执行的函数。

  TextDuringCallBack: 用于定义回调过程中控件显示的提示信息(通常是提示等待的文字)

  EnabledDuringCallBack: 在回调过程中,控件是否禁用。

  CallBackCancelledFunction: 如果回调被取消,则会调用这个函数。

  代码例子:

  <anthem:Button id="button1" runat="server" Text="Click Me!" TextDuringCallBack="Working..." EnabledDuringCallBack="false" PreCallBackFunction="button1_PreCallBack" PostCallBackFunction="button1_PostCallBack" CallBackCancelledFunction="button1_CallBackCancelled" />

  <script language="javascript" type="text/javascript">

  // 回调之前,可在这里取消回调

  function button1_PreCallBack(button) {

  if (!confirm('Are you sure you want to perform this call back?')) {

  return false;

  }

  document.getElementById('button2').disabled = true;

  }

  // 回调完成后

  function button1_PostCallBack(button) {

  document.getElementById('button2').disabled = false;

  }

  // 取消回调后

  function button1_CallBackCancelled(button) {

  alert('Your call back was cancelled!');

  }

  </script>

  注意以上这些客户端处理函数中,都可以传递 control 本身作为参数,因此在必要的情况下这些函数是可以被重用的。(比如对一组类似的控件的回发事件进行处理)

  三、调用服务器页面的方法

  服务器端需要做的事情:

  [Anthem.Method]

  public int Add(int a, int b) {

  return a + b;

  }

  void Page_Load() {

  Anthem.Manager.Register(this);

  }

  客户端:

  <input id="a" size="3" value="1">

  <input id="b" size="3" value="2">

  <button οnclick="DoAdd(); return false;" type="button">Add</button>

  <input id="c" size="6">

  // 参数的含义依次是:

  // 服务器方法的名字,

  // 方法的参数(以 js 数组形式传递),

  // 服务器端方法返回结果时调用的回调函数(因为是异步模式)。

  Anthem_InvokePageMethod(

  'Add',

  [document.getElementById('a').value, document.getElementById('b').value],

  function(result) {

  document.getElementById('c').value = result.value;

  }

  );

  调用后,在回调函数的参数中得到的 result 变量,是一个包含 value 和 error 两个属性的对象。如果在服务器端发生错误,则 value 为 null, 而 error 中包含错误数据。

  四、如何处理回调时可能发生的异常

  在页面中定义 Anthem_Error js 函数,则可处理所有回调时的未处理异常。

  <script type="text/javascript">

  function Anthem_Error(result) {

  alert('Anthem_Error was invoked with the following error message: ' +

  result.error);

  }

  </script>

  异常也可以在服务器端处理。只要定义下列名称的方法:

  void Page_Error()

  {

  Anthem.Manager.AddScriptForClientSideEval("window.location = 'http://anthem-dot-net.sf.net/'");

  }

  在服务器端处理有一些额外的好处,主要是可以将异常信息记录到日志.

  五、页面跳转

  在 Callback 的处理中,不能用 Response.Redirect 来处理页面跳转,因为这些函数是通过 js 的无刷新来调用的。代替的办法是用 Anthem.Manager 回传一段 js 给客户端去用 eval 的方式执行,从而达到页面跳转的效果(推而广之,这个 eval 的功能当然不限于跳转页面,可以干很多其他的事情)。

  代码示例:

  Anthem.Manager.AddScriptForClientSideEval("window.location = 'http://anthem-dot-net.sourceforge.net/';");

  六、几个全局级别的客户端回调函数

  我们可以在客户端定义几个特殊名字的函数,以供 Anthem 在每一次回调的前后调用。这些函数包括:

  Anthem_PreCallBack(),

  Anthem_CallBackCancelled(),

  Anthem_PostCallBack(),

  除此之外还包括前面说到的 Anthem_Error() 等。

  这里典型的一个应用场景是,在每次回调开始后,我们在 Anthem_PreCallBack() 中创建一个“loading”信息的层,然后在取消(Anthem_CallBackCancelled) 或成功回调后(Anthem_PostCallBack),移除这个层。

  这样可以很方便的模拟出类似 Gmail 中的加载效果。

  七、回调过程中向页面添加了新的 js 脚本

  这种情况下必须设定一个额外的属性:

  Anthem.Manager.IncludePageScripts = true;

  例子:

  <script runat="server">

  protected void button1_Click(object sender, EventArgs e)

  {

  HtmlButton button = new HtmlButton();

  button.InnerText = "Now click me!"

  button.Attributes["onclick"] = "ThankYou();"

  placeholder1.Controls.Add(button);

  placeholder1.UpdateAfterCallBack = true;

  string script = @"<script type=""text/javascript"">

  function ThankYou() {

  alert('Thank you!');

  }

  </" + "script>"

  #if V2

  Page.ClientScript.RegisterClientScriptBlock(typeof(Page), script, script);

  #else

  Page.RegisterClientScriptBlock(script, script);

  #endif

  Anthem.Manager.IncludePageScripts = true;

  }

  </script>

  八、PreUpdate 事件

  控件在 Render 之前,如果 UpdateAfterCallBack 为 true,则会引发这个事件。

  目前这个事件的用途似乎不大。

  大致的了解了一下Anthem.NET,感觉还是蛮不错的,至少在目前的应用中,已经足够了。:)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值