Asp.Net2.0无刷新客户端回调

Asp.Net2.0无刷新客户端回调
2007-08-26 10:15

Asp.Net2.0的客户端回调是一种很让人激动的方法,他能够让我们控制要提交什么数据给服务器而不用提交整个页面,同时服务器也只返回你所需要的数据而不要发回整个页面。 首先我们要说一个很重要的方法:GetCallbackEventRefernce.我把我的理解写出来,可能是错误的,恳请指出,非常感谢! GetCallbackEventReference 首先实现让客户端脚本有能力传递参数给服务器端的RaiseCallbackEvent方法,然后返回RaiseCallBackEvent方法的值给你在GetCallbackEventRefernce方法中注册的一个参数(其实也是一个你要在客户端写的脚本)。调用 GetCallbackEventRefernce你必须从客户端脚本中传递给他两个参数,一个是要传递给RaiseCallbackEvent事件的值,一个是context. 他的参数意义如下: 第一个:实现了ICallbackEventHandler借口的页面或者服务器控件,写this代表但前页面。 第二个:代表你从要从客户端传递给服务器RaiseCallbackEvent方法的值 第三个:你要在客户端写的一个js函数,同时,服务器也会把计算得到的数据传递给这个函数做为                  这个函数的参数。 第四个:context具体什么意思我也不太清楚 GetCallbackEventRefernce发送到了客户、端的代码是这样的: WebForm_DoCallback('__Page',arg,ReceiveServerData,context,null,false) 那么我们要怎么样做才能够从客户端调用他呢?看到了三中方法: 第一种:在后台写个public string,在Page_Load中给他赋值为:=Page.ClientScript.GetCallbackEventReference (this, "message", "ShowServerTime", "context");注意在这里是Page.ClientScrip,因为他会返回个ClientScriptManager, ClientScriptManager管理所有的客户端脚本。然后在前台某个按钮的onclick事件里<%=那个public后台字符串% >.做个小实验代码如下: 前台ServerTime.aspx:为了方便去掉好多没用的html <%@ page language="C#" CodeFile="ServerTime.aspx.cs" Inherits="ServerTime_aspx" %> <html>     <head>        <title>Server Time</title>        <script language="javascript">

          function GetServerTime()           {              var message = '';              var context = '';                           <%=sCallBackFunctionInvocation%>           }                     function ShowServerTime(timeMessage, context) {              alert('现在服务器上的时间是:/n' + timeMessage);           }        </script>     </head> <body>     <form id="MainForm" runat="server">        <input type="button" value="得到服务器端时间" οnclick="GetServerTime();" />     </form> </body> </html>

后台: using System; using System.Web.UI;

public partial class ServerTime_aspx : Page,ICallbackEventHandler { //一定要实现ICallbackEventHandler借口    public string sCallBackFunctionInvocation;

   void Page_Load(object sender, System.EventArgs e)    {     sCallBackFunctionInvocation = Page.ClientScript.GetCallbackEventReference(this, "message", "ShowServerTime", "context");    }

   public string RaiseCallbackEvent(string eventArgument)    {     return DateTime.Now.ToString();    } } 运行,点按钮结果如下: 第二种方法:在上面的方法中我们必须要在前台绑定后台,那么如果不绑定呢?我们这样做: 直接把GetCallbackEventReference当做js函数中的一个实现内容,然后把这个js函数注册到客户端。 前台TestPage代码: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="TestPage.aspx.cs" Inherits="TestPage" %> <html> <head>      <title>Untitled Page</title> <script type="text/javascript">          function test()          {              var lb = document.getElementById("Select1");              //取的那个下拉框              var con = lb.options[lb.selectedIndex].text;              //得到你选择的下拉框的文本再调用呢个CallTheServer,是一个由服务器端输出的js函数              CallTheServer(con,'');          }          function ReceiveServerData(rValue)          {              Results.innerHTML = rValue;          }      </script> </head> <body>      <form id="form1" runat="server">      <div>          <select id="Select1">              <option value=1 selected="selected">老鼠徒弟</option>              <option value=2>吴旗娃师傅</option>          </select>          <br />          <br />          <input οnclick="test()" value="从服务器返回下拉框文本" type=button>          <br />          <br />          <span ID="Results"></span>          <br />      </div>      </form> </body> </html>

后台代码:

using System; using System.Data; using System.Configuration; using System.Collections; 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 TestPage : System.Web.UI.Page,System.Web.UI.ICallbackEventHandler {      protected void Page_Load(object sender, EventArgs e)      {    String cbReference = Page.ClientScript.GetCallbackEventReference(this, "arg", "ReceiveServerData", "context");    String callbackScript;    callbackScript = "function CallTheServer(arg,context)" +     "{ " + cbReference + "} ;";    Page.ClientScript.RegisterStartupScript(this.GetType(),"abcdefg",callbackScript, true);    //第四个参数代表是不是要自动给着脚本加上<script type="text/javascript"></script>标记,当然要加啊      } public String RaiseCallbackEvent(String eventArgument) {    return "你选择的是" + eventArgument; } }

下面是执行结果: 第三种:前面两种都是<input type="button"的html控件,那么如果是服务器按钮呢?当然也可以,在后台添加服务器按钮的onclick 属性。 前台third.aspx代码: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="third.aspx.cs" Inherits="third" %> <html> <head>      <title>Untitled Page</title> </head> <body>      <form id="form1" runat="server">      <div>          <select id="Select1">              <option selected="selected" value=1>老鼠徒弟</option>              <option value=2>吴旗娃师傅</option>          </select>          <asp:Button ID="Button1" runat="server" Text="这是个服务器按钮" /></div>          <div id="div1" />          <script type="text/javascript">              function Re(ret)              {                 document.getElementById("div1").innerHTML = ret;                 alert(ret);              }          </script>      </form> </body> </html> 后台代码: using System; using System.Data; using System.Configuration; using System.Collections; 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 third : System.Web.UI.Page,System.Web.UI.ICallbackEventHandler {      protected void Page_Load(object sender, EventArgs e)      {    //第四个参数为null,因为你不可能再在js中给他传参数了    string str = Page.ClientScript.GetCallbackEventReference(this,"document.getElementById('Select1').options[document.getElementById('Select1').selectedIndex].text","Re",null);    //return false是为了防止提交窗体    Button1.Attributes.Add("onclick",str+";return false;");      }

#region ICallbackEventHandler Members

public string RaiseCallbackEvent(string eventArgument) {    if (eventArgument == "老鼠徒弟")    {     return "老鼠徒弟:人生如鼠,不在仓就在厕!";    }    else    {     return "吴旗娃师傅:自信自强,乐观向上";    } }

#endregion } 小技巧,当你写完System.Web.UI.ICallbackEventHandler后,把鼠标移上去,那么System前面会有个小图表,点他会自动写好那个RaiseCallbackEvent代码,效果如下;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值