首页 > 代码库 > 采用异步回调显示实时股价
采用异步回调显示实时股价
无论在股票或者基金网站,可以看到股票的价格实时变化,并且整个页面感觉不到刷新,仅仅是股票的价格在不断变化,这个是如何实现的呢?
1、新增一个自定义用户控件文件Callback.ascx
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="Callback.ascx.cs" Inherits="ClientControl_Callback" %> <script type="text/javascript" lang="javascript"> function <%=this.ID%>_OnCallbackCompleteDefault(ret) { } </script>
using System; using System.Collections.Generic; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; public partial class ClientControl_Callback : System.Web.UI.UserControl, System.Web.UI.ICallbackEventHandler { public class CallbackEventArgs { public CallbackEventArgs() { } public CallbackEventArgs(string Parameter, string Result) { parameter = Parameter; result = Result; } private string parameter = ""; public string Parameter { get { return parameter; } set { parameter = value; } } private string result = ""; public string Result { get { return result; } set { result = value; } } } public delegate void CallbackEventHandler(object source, CallbackEventArgs e); public event CallbackEventHandler Callback; private CallbackEventArgs EventArgs; #region 属性 public string ClientPerformCallback { get { if (this.ViewState["ClientPerformCallback"] != null) return (string)this.ViewState["ClientPerformCallback"]; return string.Empty; } set { this.ViewState["ClientPerformCallback"] = value; } } public string ClientCompleteEvent { get { if (this.ViewState["ClientCompleteEvent"] != null) return (string)this.ViewState["ClientCompleteEvent"]; return string.Empty; } set { this.ViewState["ClientCompleteEvent"] = value; } } public string ClientErrorEvent { get { if (this.ViewState["ClientErrorEvent"] != null) return (string)this.ViewState["ClientErrorEvent"]; return string.Empty; } set { this.ViewState["ClientErrorEvent"] = value; } } #endregion protected void Page_Load(object sender, EventArgs e) { Callback += new CallbackEventHandler(OnCallback); string cbReference = ""; string completeEvent = ClientCompleteEvent; if (string.IsNullOrEmpty(ClientCompleteEvent)) { completeEvent = this.ID + "_OnCallbackCompleteDefault"; } if (string.IsNullOrEmpty(ClientErrorEvent)) { cbReference = Page.ClientScript.GetCallbackEventReference( this, "arg", completeEvent, "context", true); } else { cbReference = Page.ClientScript.GetCallbackEventReference( this, "arg", completeEvent, "context", ClientErrorEvent, true); } string callbackScript = "function " + ClientPerformCallback + "(arg, context)" + "{ " + cbReference + "} ;"; Page.ClientScript.RegisterClientScriptBlock(this.GetType(), this.ID + "_CallBackJS_" + ClientPerformCallback, callbackScript, true); } protected virtual void OnCallback(object source, CallbackEventArgs e) { } string ICallbackEventHandler.GetCallbackResult() { return EventArgs.Result; } void ICallbackEventHandler.RaiseCallbackEvent(string eventArgument) { EventArgs = new CallbackEventArgs(eventArgument, ""); Callback(this, EventArgs); } }
2、使用该自定义用户控件实现局部刷新的效果
新建一个Test.aspx页面
<%@ Page Title="" Language="C#" AutoEventWireup="true" CodeFile="Test.aspx.cs"%> <%@ Register TagPrefix="cb" TagName="Callback" Src=http://www.mamicode.com/"~/Callback.ascx" %>>后台代码:
using System; using System.IO; using System.Collections; using System.Collections.Generic; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Data; using System.Text; using Newtonsoft.Json; public partial class Test : BasePage { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { } } protected void Callback1_Callback(object source, UserControl_Callback.CallbackEventArgs e) { List<Stock> stockList = new List<Stock>(); Random rdm =new Random(); Stock stock = new Stock(); stock.Name = "交通银行"; stock.Price = rdm.Next(10); stockList.Add(stock); stock = new Stock(); stock.Name = "民生银行"; stock.Price = rdm.Next(10); stockList.Add(stock); e.Result = JavaScriptConvert.SerializeObject(stockList); ; } } public class Stock { private string _Name; public string Name { get { return _Name; } set { _Name = value; } } private float _Price; public float Price { get { return _Price; } set { _Price = value; } } }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。