ASP.NET 2.0中不用AJAX框架实现AJAX效果

介绍

现在ASP.Net AJAX Framework已经发布了,可以方便的编写拥有AJAX功能的Web程序,本文介绍的方法是应用ICallbackEventHandler接口实现的AJAX调用。优点是不需要安装ASP.NET AJAX Framework,缺点是实现起来比较繁琐。

注册javascript函数。

首先我们要在Page_Load函数中注册一个javascript函数,要想注册一个javascript函数,我们首先要获取ClientScriptManager

ClientScriptManager manager  =   this .Page.ClientScript;

然后获取一个CallbackReference

string  callbackRef  =  manager.GetCallbackEventReference( this " args " " OnComplete " " ctx " " OnMyError " true );

这将得到一个javascript的代码段,在我的机器上的值是

"WebForm_DoCallback('__Page',args,OnComplete,ctx,OnMyError,true)"

也就是ASP.NET为我们生成的一个回调函数。这5个参数和GetCallbackEventReference的5个参数相对应。我们可以将这个代码片断放到我们自己定义的一个函数里面,马上就可以看到怎么使用了

 

protected   void  Page_Load( object  sender, EventArgs e)
    
{
        
if (!this.Page.IsCallback)
        
{

            ClientScriptManager manager 
= this.Page.ClientScript;

            
string callbackRef = manager.GetCallbackEventReference(this"args""OnComplete""ctx""OnMyError"true);

            StringBuilder sb 
= new StringBuilder();

            sb.AppendLine(
"function MyCallBack(args, ctx)");
            sb.AppendLine(
"{");
            sb.AppendLine(
"    " + callbackRef + ";");
            sb.AppendLine(
"}");

            sb.AppendLine(
"function OnComplete(args, ctx)");
            sb.AppendLine(
"{");
            sb.AppendLine(
"    document.getElementById('" + Panel1.ID + "').innerHTML = args;");
            sb.AppendLine(
"}");

            sb.AppendLine(
"function OnMyError(err)");
            sb.AppendLine(
"{");
            sb.AppendLine(
"    alert('error=' + err);");
            sb.AppendLine(
"}");

            manager.RegisterClientScriptBlock(
base.GetType(), "CallBackFunction", sb.ToString(), true);

        }

    }

我声明了3个Javascript函数,MyCallBack, OnComplete,OnMyError。MyCallBack包装了一下ASP.NET返回的Javascript代码片断,在我的机器上展开就是:

function  MyCallBack(args, ctx)
{
        WebForm_DoCallback(
'__Page',args,OnComplete,ctx,OnMyError,true)
}

OnComplete在后台成功返回数据后调用,OnMyError在发生错误时调用。

 

实现接口ICallbackEventHandler

使后台的页面类实现接口ICallbackEventHandler,ICallbackEventHandler接口有两个方法RaiseCallbackEvent和GetCallbackResult。对于每个javascript发过来的ajax调用,首先会调用Page_Load方法,调用时this.Page.IsCallBack为true. 然后会调用RaiseCallbackEvent方法,RaiseCallbackEvent参数为一个string,其值就是javascript调用MyCallBack函数时传入的值。最后调用GetCallbackResult将结果返回给浏览器端。GetCallbackResult的返回值,就是OnComplete函数的第一个参数。

到这里一个完整的调用就结束了。

建立程序

首先在VS2005中建立一个ASP.NET的Web Site, 在页面上添加一个HtmlButton和一个Panel,然后为HtmlButton添加一个onclick处理函数MyCallBack(), 添加完的HTML文件如下:

<% @ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default"  %>

<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >

< html  xmlns ="http://www.w3.org/1999/xhtml"   >
< head  runat ="server" >
    
< title > Untitled Page </ title >
</ head >
< body >
    
< form  id ="form1"  runat ="server" >
    
< div >
        
< br  />
        
< input  id ="Button1"  style ="width: 172px"  type ="button"  onclick ="MyCallBack()"  value ="Get Date"   />< br  />
        
< br  />
        
< asp:Panel  ID ="Panel1"  runat ="server" >
        
</ asp:Panel >
        
&nbsp; </ div >
    
</ form >
</ body >
</ html >

 

 这是后台的C#代码

 

using  System;
using  System.Text;
using  System.Web.UI;

public   partial   class  _Default : Page, ICallbackEventHandler
{
    
private string mTime = "None";

    
public void RaiseCallbackEvent(string eventArgument)
    
{
        mTime 
= DateTime.Now.ToString();
    }


    
public string GetCallbackResult()
    
{
        
return mTime;
    }


    
protected void Page_Load(object sender, EventArgs e)
    
{
        
if (!this.Page.IsCallback)
        
{

            ClientScriptManager manager 
= this.Page.ClientScript;

            
string callbackRef = manager.GetCallbackEventReference(this"args""OnComplete""ctx""OnMyError"true);

            StringBuilder sb 
= new StringBuilder();

            sb.AppendLine(
"function MyCallBack(args, ctx)");
            sb.AppendLine(
"{");
            sb.AppendLine(
"    " + callbackRef + ";");
            sb.AppendLine(
"}");

            sb.AppendLine(
"function OnComplete(args, ctx)");
            sb.AppendLine(
"{");
            sb.AppendLine(
"    document.getElementById('" + Panel1.ID + "').innerHTML = args;");
            sb.AppendLine(
"}");

            sb.AppendLine(
"function OnMyError(err)");
            sb.AppendLine(
"{");
            sb.AppendLine(
"    alert('error=' + err);");
            sb.AppendLine(
"}");

            manager.RegisterClientScriptBlock(
base.GetType(), "CallBackFunction", sb.ToString(), true);

        }

    }

  
}

 

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值