gxc

永远不要认为有什么事情是理所当然的!

  :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

asp.net2.0有一个功能是在客户端“很隐秘地”执行服务器端的代码,再从服务器端返回一个结果给客户端,从而达到执行了后台代码却没有刷新页面的效果。
首先,要实现的页面或者控件必须要继承ICallbackEventHandler接口,在vs2005七月份的beta版里,这个接口定义了两个方法,PrepareCallbackEvent和RenderCallbackResult,前者用来接收客户端传过来的参数,后者返回参数给客户端。以前的版本只有一个方法RaiseCallbackEvent,似乎也能很好的实现,不知道拆成两个方法是何用意。
部分服务器端代码如下:
public partial class CallBack_BtCall : System.Web.UI.Page, System.Web.UI.ICallbackEventHandler
{
 protected string EventArgument = "";
 public void PrepareCallbackEvent(string eventArgument)
 {
  this.EventArgument = eventArgument;
 }
 public string RenderCallbackResult()
 {
  return "客户端在[" + DateTime.Now.ToString() + "]传送来 [" + this.EventArgument + "].";
 }
 protected void Page_Load(object sender, EventArgs e)
 {
  //客户端脚本函数的定义
  //该函数CallTheServer通过传递参数param到服务器端
  string callbackRef = Page.ClientScript.GetCallbackEventReference(this, "param", "handleResultFromServer", "context");
  String callbackScript = "function CallTheServer(param, context)" + "{ " + callbackRef + "} ;";
  Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "CallTheServer", callbackScript, true);

  //客户端的函数调用
this.Button1.Attributes.Add("OnClick", "javascipt:CallTheServer(document.getElementById('Text1').value,'');");
 }

}
  

部分客户端代码如下:
<script language=javascript>
    function callToServer()
{
//param 是传递给服务器端的参数
    var param = document.getElementById("Text1").value;
    var context = "";
    CallTheServer(param,context);

}
//处理服务器端传回来参数后的函数,result是传回来的参数
function handleResultFromServer(result, context)
{
    document.getElementById("Text2").value = result;
}

</script>

posted on 2005-08-29 15:25  gxc  阅读(368)  评论(0编辑  收藏  举报