網站開發

          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 風雨兼程 閱讀(232) 評論(0)  編輯  收藏 所屬分類: Asp.net 2.0

          主站蜘蛛池模板: 宁津县| 鄱阳县| 云龙县| 剑川县| 洞头县| 东莞市| 昂仁县| 忻城县| 内江市| 太白县| 泾川县| 错那县| 湟中县| 福贡县| 海南省| 郯城县| 清苑县| 当涂县| 武定县| 诸暨市| 咸丰县| 武功县| 新民市| 自贡市| 塘沽区| 临颍县| 历史| 闵行区| 怀化市| 尼玛县| 理塘县| 千阳县| 武鸣县| 家居| 叶城县| 万宁市| 东安县| 滦平县| 海南省| 公主岭市| 房山区|