隨筆 - 30, 文章 - 0, 評論 - 9, 引用 - 0
          數(shù)據(jù)加載中……

          asp.net2.0中使用客戶端回調(diào)實現(xiàn)無刷新應(yīng)用!

          在asp.net1.1中我們可以通過JS調(diào)用Web服務(wù)來實現(xiàn)無刷新應(yīng)用,現(xiàn)在asp.net2.0可以用Client Callback的方法實現(xiàn),這樣變得更加方便和容易使用了.客戶端回調(diào)功能的實現(xiàn)需要兩步:
          1.為控件或頁面實現(xiàn)ICallbackEventHandler接口,該接口有一個方法public string RaiseCallbackEvent(string eventArgument),這個方法的原理是接收客戶端發(fā)送過來的參數(shù),然后返回一個結(jié)果字符串給客戶端進(jìn)行處理.例如:
          public partial class ShowReview_ascx : ICallbackEventHandler
          {
          ??? public string RaiseCallbackEvent(string eventArgument)
          ??? {
          ??????? int reviewId = int.Parse(eventArgument);
          ??????? Discussion discussion = AspNetCommerce.DiscussionManager.GetDiscussion(reviewId);
          ??????? StringBuilder sb = new StringBuilder();
          ??????? sb.AppendFormat("<table class='{0}>", "ShowReview_ascx_DisTable");
          ??????? foreach (DiscussionItem item in discussion)
          ??????? {
          ????????????//輸出html
          ??????? }
          ??????? sb.Append("</table>");
          ??????? return sb.ToString();
          ??? }
          }
          該方法接收客戶端的傳來的一個參數(shù),轉(zhuǎn)換為 reviewId,根據(jù)reviewId查詢出相關(guān)數(shù)據(jù)以html形式返回給客戶端.
          2.實現(xiàn)兩個客戶端腳本,并使用Page.GetCallbackEventReference說明客戶端如何處理返回結(jié)果.
          例如:
          Page.GetCallbackEventReference(this, "topicid", "HandleResultFromServer", "context", "HandleErrorResultFromServer")
          this表示實現(xiàn)ICallbackEventHandler的控件的實例,
          topicid表示客戶端傳入的字符串參數(shù)數(shù)
          HandleResultFromServer表示處理成功調(diào)用后的結(jié)果的客戶端腳本函數(shù)名
          context表示回調(diào)的啟動方法處與處理回調(diào)結(jié)果的方法之間的傳遞參數(shù)
          HandleErrorResultFromServer表示處理失敗調(diào)用后的結(jié)果的客戶端腳本函數(shù)名
          部分客戶端腳本如:
          ??? void Page_Load(object sender, EventArgs e)
          ??? {
          ??????? if (!IsPostBack || !this.EnableViewState)
          ??????? {
          ??????????? StringBuilder sb = new StringBuilder();
          ??????????? sb.Append("function loadtree(topicid){");
          ??????????? sb.Append("var targetImg = document.all('img_'+topicid);");
          ??????????? sb.Append("var targetDiv = document.all('tr_'+topicid);");
          ??????????? sb.Append("if (targetDiv.style.display != 'block'){");
          ??????????? sb.Append("targetDiv.style.display = \"block\";");
          ??????????? sb.AppendFormat("targetImg.src = \"{0}\";", AspNetCommerce.CommerceContext.GetThemesImagePathForImgTag("ShowReview_ascx/Expand-Open.gif"));
          ??????????? sb.Append("targetImg.alt = \"點(diǎn)擊收回\";");
          ??????????? sb.Append("var context = topicid;");
          ??????????? sb.AppendFormat("{0}", Page.GetCallbackEventReference(this, "topicid", "HandleResultFromServer", "context", "HandleErrorResultFromServer"));
          ??????????? sb.Append("}else{");
          ??????????? sb.Append("targetDiv.style.display = \"none\";");
          ??????????? sb.AppendFormat("targetImg.src = \"{0}\";", AspNetCommerce.CommerceContext.GetThemesImagePathForImgTag("ShowReview_ascx/Expand-Closed.gif"));
          ??????????? sb.Append("targetImg.alt = \"點(diǎn)擊查看討論\";");
          ??????????? sb.Append("}");
          ??????????? sb.Append("}");
          ??????????? sb.Append("function HandleResultFromServer(result,context)");
          ??????????? sb.Append("{");
          ??????????? sb.Append("var targetTd = document.all('td_'+context);");
          ??????????? sb.Append("targetTd.innerHTML = result");
          ??????????? //sb.Append("alert(result);");
          ??????????? sb.Append("}");
          ??????????? sb.Append("function HandleErrorResultFromServer(result,context)");
          ??????????? sb.Append("{");
          ??????????? sb.Append("var targetTd = document.all('td_'+context);");
          ??????????? sb.AppendFormat("targetTd.innerHTML = '<font color=red>{0}</font>'",
          ??????????????? "數(shù)據(jù)讀錯誤,請重新再試或通知管理員!");
          ??????????? sb.Append("}");
          ??????????? Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "ClientCallBack", sb.ToString(), true);
          ??????? }
          ??? }

          posted on 2006-11-07 14:59 風(fēng)雨兼程 閱讀(232) 評論(0)  編輯  收藏 所屬分類: Asp.net 2.0

          主站蜘蛛池模板: 华坪县| 新郑市| 阳高县| 如东县| 白城市| 商城县| 石楼县| 新竹县| 绥滨县| 龙岩市| 进贤县| 诏安县| 岳阳市| 周宁县| 繁峙县| 定西市| 沾益县| 紫金县| 芦溪县| 精河县| 台山市| 辽阳市| 四川省| 定南县| 日土县| 万荣县| 永川市| 庄浪县| 杨浦区| 五莲县| 忻城县| 凤庆县| 明星| 嘉峪关市| 晋城| 延庆县| 唐海县| 天祝| 六枝特区| 凤山市| 志丹县|