網站開發

          asp.net
          隨筆 - 30, 文章 - 0, 評論 - 9, 引用 - 0
          數據加載中……

          asp.net2.0中使用客戶端回調實現無刷新應用!

          在asp.net1.1中我們可以通過JS調用Web服務來實現無刷新應用,現在asp.net2.0可以用Client Callback的方法實現,這樣變得更加方便和容易使用了.客戶端回調功能的實現需要兩步:
          1.為控件或頁面實現ICallbackEventHandler接口,該接口有一個方法public string RaiseCallbackEvent(string eventArgument),這個方法的原理是接收客戶端發送過來的參數,然后返回一個結果字符串給客戶端進行處理.例如:
          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();
          ??? }
          }
          該方法接收客戶端的傳來的一個參數,轉換為 reviewId,根據reviewId查詢出相關數據以html形式返回給客戶端.
          2.實現兩個客戶端腳本,并使用Page.GetCallbackEventReference說明客戶端如何處理返回結果.
          例如:
          Page.GetCallbackEventReference(this, "topicid", "HandleResultFromServer", "context", "HandleErrorResultFromServer")
          this表示實現ICallbackEventHandler的控件的實例,
          topicid表示客戶端傳入的字符串參數數
          HandleResultFromServer表示處理成功調用后的結果的客戶端腳本函數名
          context表示回調的啟動方法處與處理回調結果的方法之間的傳遞參數
          HandleErrorResultFromServer表示處理失敗調用后的結果的客戶端腳本函數名
          部分客戶端腳本如:
          ??? 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 = \"點擊收回\";");
          ??????????? 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 = \"點擊查看討論\";");
          ??????????? 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>'",
          ??????????????? "數據讀錯誤,請重新再試或通知管理員!");
          ??????????? sb.Append("}");
          ??????????? Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "ClientCallBack", sb.ToString(), true);
          ??????? }
          ??? }

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

          主站蜘蛛池模板: 安泽县| 汝阳县| 嘉义县| 东兴市| 景洪市| 盱眙县| 林芝县| 敦化市| 新和县| 绥宁县| 拜城县| 元氏县| 包头市| 定远县| 额济纳旗| 敖汉旗| 彰化县| 昌吉市| 永平县| 文昌市| 丰都县| 项城市| 德清县| 汾西县| 工布江达县| 屯门区| 芦溪县| 兴和县| 蒙自县| 广昌县| 禄丰县| 大石桥市| 民丰县| 丹江口市| 和田市| 台北县| 清苑县| 洪洞县| 建昌县| 富裕县| 盘锦市|