舍弃PostBack,采用CallBack(范例)

摘要:test


文章来源 http://blog.yam.com/jerrytung/article/3639749

由于PostBack 是透过 Submit 和 Reload,让 Client 端和 Server 端交互,但当控件一多时,一个页面 PostBack 回去,再重新 Reload 回来,会造成画面一闪一闪的,若带宽不足,还会导致动作异常不流畅。

因此想要在不换页的状况下就可以更新 Client 端的网页,可以采用 CallBack 的机制。


首先要让页面支持 CallBack,必须在 Page 实践 System.Web.UI.ICallbackEventHandler 这个 interface,
并且实践此 interface 的两个方法:

string GetCallbackResult ()
void RaiseCallbackEvent (string EventArgument)

CallBack整个流程原理:
Step1.按下 HtmlButton

Step2.执行 CallBack 机制

Step3.CallBack 机制会在 Client 端背景调用 Server 端的 .aspx.cs 程序,此步并不会引发 PostBack(这时 Server 端的‘RaiseCallbackEvent’会接收到 Client 端传入的值[此例为 CallBackButtonArg]。接着,会透过‘GetCallbackResult’将运算过的值回传到 Client 端)

Step4.Server 端处理完之后,会链 Client 端的 JavaScript 函数‘ReceiveServerData’,因此刚才透过‘GetCallbackResult’回传的值,会被‘ReceiveServerData’接收到。

Step5.显示结果,完成 CallBack 机制。

其 中‘ReceiveServerData(arg, context) ’内容的 CallBackButtonArg 为 server 回传的数据(也就是从‘GetCallbackResult’ 返回的字符串数据), 而 context 则是第二个变量, 这个变量是 for client side javascript 自己在完成 callback 时使用的, 也就是在上面看到的 'JerryTung' 这个部分, 这个变量注意是 client side 的(当然可以从 server side 生成后放入, 但不会在 callback runtime 时改变)。

完整的程序及注解如下:

----------------------------------Default.aspx--------------------------------------

<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>



   未命名页面


  


  

      
      

  




===========================================================

----------------------------------Default.aspx.cs----------------------------------

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class _Default : System.Web.UI.Page, System.Web.UI.ICallbackEventHandler
{
   string strCallback;

    //处理从 Client 端传来的值,其中 eventArgument 为触发事件的参数
   public void RaiseCallbackEvent(String eventArgument)
   {
       strCallback = eventArgument + " " + DateTime.Now.ToString("hh:mm:ss");
   }

    //处理要回传给 Client 端的值
   public string GetCallbackResult()
   {
       return strCallback;
   }

    protected void Page_Load(object sender, EventArgs e)
   {
       //建立一段可以触发 CallBack 的 JavaScript 命令码
       string cbReference = Page.ClientScript.GetCallbackEventReference(this, "'CallBackButtonArg'", "ReceiveServerData", "'JerryTung'");
       //将刚才建立好的 CallBack 的 JavaScript 程序,注册到 HtmlButton 的 onclick 事件上
       CallBackButton.Attributes["onclick"] = cbReference;

        //产生一段 JavaScript 函数,用来接收并处理 CallBack 机制执行后从 Server 端传来的回传值
       string strScript = "function ReceiveServerData(arg, context){ document.getElementById('" + TextBox1.ClientID + "').value = '# ' + arg + ' @ ' + context; }";
       //在页面上插入 strScript 的 JavaScript 程序
       Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "myscript", strScript, true);
   }
}

===========================================================

原文:大专栏  舍弃PostBack,采用CallBack(范例)


猜你喜欢

转载自www.cnblogs.com/chinatrump/p/11458391.html