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);
}
}
}
现在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);
}
}
}
相关文章推荐
- ASP.NET2.0中Tabs的简单实现 不用Asp.net Ajax ControlToolKit中的Tabs控件实现Tabs效果的简单实现方法:
- 不用AJAX框架实现AJAX效果
- 用ASP.NET 2.0实现AJAX风格的Web开发
- Asp.net 2.0 自定义控件开发[实现GridView多行表头固定表体滚动效果][示例代码下载]
- Ajax 实现在WebForm中拖动控件并即时在服务端保存状态数据 (Asp.net 2.0)(示例代码下载)
- Ajax即时实现服务端数据验证(Asp.net 2.0)(示例代码下载)
- 使用ASP.NET AJAX实现幻灯片效果
- ASP.NET 2.0中使用AJAX实现弹窗报警提示
- AjaxPro.NET实现TextBox智能获取服务端数据功能(Asp.net 2.0)(示例代码下载)
- asp.net 2.0 ajax中实现弹出窗口报警提示
- Asp.net 2.0 自定义控件开发[实现GridView多行表头固定表体滚动效果]
- Ajax 实现在WebForm中拖动控件并即时在服务端保存状态数据 (Asp.net 2.0)(示例代码下载)
- asp.net ajax实现类似交替项模板 和 光棒效果。
- [翻译]使用ASP.NET AJAX实现幻灯片效果
- ASP.Net AJAX+userControl+js实现仿igoogle效果网站
- Asp.net 2.0 自定义控件开发[实现GridView多行表头固定表体滚动效果][示例代码下载]
- 转载:Ajax 实现在WebForm中拖动控件并即时在服务端保存状态数据 (Asp.net 2.0)(示例代码下载)
- Asp.net 2.0 自定义控件开发[实现GridView多行表头固定表体滚动效果][示例代码下载]
- Asp.net 2.0 自定义控件开发[实现GridView多行表头固定表体滚动效果][示例代码下载]
- Ajax即时实现服务端数据验证(Asp.net 2.0)(示例代码下载)