您的位置:首页 > 编程语言 > ASP

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

2007-05-30 19:04 696 查看
介绍

现在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.getEle
10ab6
mentById('" + 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>


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




        }


    }


  


}



 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐