非Ajax无刷之ClientScript.GetCallbackEventReference
2011-02-24 10:44
429 查看
以前使用无刷,只有两种办法,一种使用JS,另一种则使用AJax,使用起比较方便,但与后台的交互不是很好,直到我今天发现ClientScript.GetCallbackEventReference,才发现asp.net真正的强大之处,下面我就来简单介绍一下这个方法的使用
首先,要使用这个方法,必有继承一个接口:ICallbackEventHandler,
接口里面两个方法如下:
// 摘要:
// 返回以控件为目标的回调事件的结果。
//
// 返回结果:
// 回调的结果。
string GetCallbackResult();
//
// 摘要:
// 处理以控件为目标的回调事件。
//
// 参数:
// eventArgument:
// 一个字符串,表示要传递到事件处理程序的事件参数。
void RaiseCallbackEvent(string eventArgument);
看说明很详细,我们的页面里面必有实现这个方法与前台交互,这下就方便了呀!下面再介绍一下ClientScript.GetCallbackEventReference用法,这个方法是在前台实现,看代码比较清楚:
<script type="text/javascript">
//需要调用这个方法启用后台方法
//arg与context为前台需要传递给后台的参数,好好利用吧
function CallServer(arg, context)
{
//this不用说了
//arg是后台能接收到的方法,也是后台返回来的值
//ReceiveServerData为后台执行完成后,前台执行的方法
//context参数原封不动传给ReceiveServerData
<%= ClientScript.GetCallbackEventReference(this, "arg", "ReceiveServerData", "context")%>;
}
//这个方法就是你要执行的前台操作,可以返回结果,也可以改变控件状态,自己喜欢吧~
function ReceiveServerData(result, context)
{
...
}
</script>
有了这两个方法之后,就可以大做文章了呀~~你的无刷是不是变得简单了呢?下面拿一下两级下拉的实例给大家参考一下吧~
首先,要使用这个方法,必有继承一个接口:ICallbackEventHandler,
接口里面两个方法如下:
// 摘要:
// 返回以控件为目标的回调事件的结果。
//
// 返回结果:
// 回调的结果。
string GetCallbackResult();
//
// 摘要:
// 处理以控件为目标的回调事件。
//
// 参数:
// eventArgument:
// 一个字符串,表示要传递到事件处理程序的事件参数。
void RaiseCallbackEvent(string eventArgument);
看说明很详细,我们的页面里面必有实现这个方法与前台交互,这下就方便了呀!下面再介绍一下ClientScript.GetCallbackEventReference用法,这个方法是在前台实现,看代码比较清楚:
<script type="text/javascript">
//需要调用这个方法启用后台方法
//arg与context为前台需要传递给后台的参数,好好利用吧
function CallServer(arg, context)
{
//this不用说了
//arg是后台能接收到的方法,也是后台返回来的值
//ReceiveServerData为后台执行完成后,前台执行的方法
//context参数原封不动传给ReceiveServerData
<%= ClientScript.GetCallbackEventReference(this, "arg", "ReceiveServerData", "context")%>;
}
//这个方法就是你要执行的前台操作,可以返回结果,也可以改变控件状态,自己喜欢吧~
function ReceiveServerData(result, context)
{
...
}
</script>
有了这两个方法之后,就可以大做文章了呀~~你的无刷是不是变得简单了呢?下面拿一下两级下拉的实例给大家参考一下吧~
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Callback.aspx.cs" Inherits="Callback" %> <!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"> <mce:script type="text/javascript"><!-- function CallServer(arg, context) { context.innerHTML = "Loading"; <%= ClientScript.GetCallbackEventReference(this, "arg", "ReceiveServerData", "context") %>; } function ReceiveServerData(result, context) { context.innerHTML = result; } // --></mce:script> <head runat="server"> <title>Callback</title> </head> <body> <form id="form1" runat="server"> <div> <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:NORTHWNDConnectionString1 %>" SelectCommand="SELECT [CategoryID], [CategoryName] FROM [Categories]"> </asp:SqlDataSource> <asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:NORTHWNDConnectionString1 %>" SelectCommand="SELECT [ProductID], [ProductName] FROM [Products] WHERE ([CategoryID] = @CategoryID)"> <SelectParameters> <asp:ControlParameter ControlID="ddlCategory" Name="CategoryID" PropertyName="SelectedValue" /> </SelectParameters> </asp:SqlDataSource> <div id="_div1" runat="server"> <asp:DropDownList ID="ddlCategory" runat="server" DataSourceID="SqlDataSource1" DataTextField="CategoryName" DataValueField="CategoryID" AppendDataBoundItems="True"> <asp:ListItem Value="">- Select Category -</asp:ListItem> </asp:DropDownList> <span id="_span1"> <asp:DropDownList ID="ddlProduct" runat="server" DataSourceID="SqlDataSource2" DataTextField="ProductName" AppendDataBoundItems="True"> <asp:ListItem Value="">- Select Product -</asp:ListItem> </asp:DropDownList> </span><span id="_span2"> <asp:Button ID="btnBuy" runat="server" Text="Buy" Enabled="false" OnClick="btnBuy_Click" /> <br /> </span> </div> <asp:Label ID="Label1" runat="server"></asp:Label> </div> </form> </body> </html>
using System; using System.IO; using System.Collections; using System.Globalization; using System.Reflection; using System.Web; using System.Web.UI; public partial class Callback : Page, ICallbackEventHandler { private string _callbackEventArgument; protected void Page_Load(object sender, EventArgs e) { ddlCategory.Attributes.Add("onchange", "CallServer('FillProduct|'+this.value,_span1)"); ddlProduct.Attributes.Add("onchange", "CallServer('ShowBuy|'+this.value,_span2)"); } ICallbackEventHandler Members#region ICallbackEventHandler Members public string GetCallbackResult() { string[] parts = _callbackEventArgument.Split('|'); object[] args = null; string result = ""; if (parts.Length > 1) { args = new object[parts.Length - 1]; Array.Copy(parts, 1, args, 0, args.Length); } MethodInfo method = this.GetType().GetMethod(parts[0]); if (method != null) { result = (string)method.Invoke(this, args); } return result; } public void RaiseCallbackEvent(string eventArgument) { _callbackEventArgument= eventArgument; } void ICallbackEventHandler.RaiseCallbackEvent(string eventArgument) { this.RaiseCallbackEvent(eventArgument); } string ICallbackEventHandler.GetCallbackResult() { return this.GetCallbackResult(); } #endregion public string FillProduct(string categoryID) { ddlCategory.SelectedValue = categoryID; ddlProduct.DataBind(); return RenderControl(ddlProduct); } public string ShowBuy(string ProductID) { btnBuy.Enabled = !string.IsNullOrEmpty(ProductID); return RenderControl(btnBuy); } protected void btnBuy_Click(object sender, EventArgs e) { _div1.Visible = false; Label1.Text = "Buy: " + Request.Form[ddlProduct.UniqueID]; } private string RenderControl(Control control) { StringWriter writer1 = new StringWriter(CultureInfo.InvariantCulture); HtmlTextWriter writer2 = new HtmlTextWriter(writer1); control.RenderControl(writer2); writer2.Flush(); writer2.Close(); return writer1.ToString(); } }
相关文章推荐
- ClientScript.GetCallbackEventReference几个参数的使用实例
- ClientScript.GetCallbackEventReference 调用服务端函数
- js 调用后台方法 ICallbackEventHandler 接口实现局部刷新实例 ClientScript的GetCallbackEventReference方法实现局部刷新
- ClientScriptManager.GetCallbackEventReference 方法
- ClientScript.GetCallbackEventReference实现局部刷新
- 用.net的GetCallbackEventReference函数来实现dropDownList联动的ajax效果
- GetCallbackEventReference(客户端调用服务器端)的用法
- GetCallbackEventReference的用法
- GetCallbackEventReference的用法
- GetCallbackEventReference方法实现局部刷新,回调非WebSerice实现
- jQuery Ajax 全解析get/load/serialize()/Query.ajax( options )jQuery.getScript(()
- GetCallbackEventReference的用法
- 在asp.net ajax中替代ClientScript.RegisterStartupScript()的方法
- ArcGIS Server9.3 AJAX系列(二)Client CallBack解决方案
- ArcGIS Server9.3 AJAX系列(二)Client CallBack解决方案
- dhl:ajax无法跨域改用getJSON(解决服务器返回json数据中文为乱码的问题$.ajaxSetup({ scriptCharset: "utf-8" , contentType: "application/json; chars)
- GetCallbackEventReference方法实现局部刷新,回调非WebSerice实现
- Ags 9.3 同时支持 ASP.NET script callbacks 和 ASP.NET AJAX
- ajax下 RegisterClientScriptBlock使用
- 非静态的字段、方法或属性“System.Web.UI.Page.ClientScript.get”要求对象引用