首页 分享 ComponentArt控件分析之CallBack(1)

ComponentArt控件分析之CallBack(1)

来源:花匠小妙招 时间:2025-07-16 06:15

    ajax说的再热也不为过,现在的商业控件几乎都要在支持ajax下一把功夫.

让我们来看下ComponentArt中CallBack的使用

Callback是一个容器,其提供一个服务器端回调事件,同时也提供了一个前端的Callback()方法.

说这个之前我们可以回顾下.net内置回调的方法.我们需要实现ICallbackEventHandler接口.服务器端需要注册脚本,客户端需要触发后端事件,然后把传回来的值传回来.

使用了

Callback控件可以省两个步骤.中间的两个步骤控件帮你做了.
我们需要做什么事情.在前端触发后端事件,后端再把数据传回来放在CallBack容器里面

先看如何使用,在使用Callback方法触发后端事件

   <script language="javascript">
 function DoCallback(param)
  {
   Callback1.Callback(param);
  }
</script>
<asp:HyperLink NavigateUrl="javascript:DoCallback('none');"
  id="hlnkGetTicks" runat="server">Get Ticks
</asp:HyperLink>
   <br />
        <ComponentArt:Callback id="Callback1" runat="server" OnCallback="Callback1_Callback" BackColor="Red">
  <Content ID="Content1">
    <asp:Label id="lblTicks" runat="server"></asp:Label>
  </Content>
</ComponentArt:Callback>

代码真的很简洁.我们几乎不用把服务器控件放在Form容器里面.呈现以后的代码也非常的漂亮.当然除了封装在dll里面的那几个js文件外

第二步在后端写回调事件

        protected void Callback1_Callback(object sender, CallBackEventArgs e)
        {
            lblTicks.Text = DateTime.Now.ToString();
            lblTicks.RenderControl(e.Output);
        }

好了,这样就可以使用了.你根本看不到一点的ajax代码.控件的封装也就成功了.

目的不在使用,而在学习如何实现.继续分析.

其是如何做到的?逃不掉的原理,一定会在脚本里出现的XMLHttpRequest对象.

我看过很多教程关于ajax的.都是A页面调用B页面的内容,其实我只需要得到数据,就是为了无刷新,我就要特地创建一个空的B页面来给A页面异步调数据.真的很不愿意.我很想在自己的页面回调数据.这个便是我想要的.首先方法还是一样.

加入A页面,我要调数据,就是A.aspx?id=xxx 然后根据id的值得来回传数据,但传回来是整个A页面的数据,不行.不过今天学了一招.可以调用HttpResponse对象的End方法,其会停止页面的执行.即你可以在页面先呈现你要呈现的东西,然后调用这个方法就OK了.

来看看CallBack如何实现

1.在呈现之前先判断有无querystring参数进来,这个querystring是自动定义的,如果有的话,则执行回调函数(事件),下面代码则不再执行.如果没有的话当然就呈现了.当然这个querystring参数是隐藏的,一般人不知道有这个东西存在.

      // is this a callback request?
      if(arParams != null && arParams.Length > 0)
      {
        this.HandleCallback(arParams);
        return;
      }

2.回调函数的实现
如下代码.其是作为xml进行输出的

    private void HandleCallback(string [] arParams)
    {
      StringWriter oStringWriter = new StringWriter();
      HtmlTextWriter oWriter = new HtmlTextWriter(oStringWriter, string.Empty);

      CallBackEventArgs oArgs 

= new CallBackEventArgs(oWriter);
      oArgs.Parameter = arParams[0];
      oArgs.Parameters = arParams;this.OnCallback(oArgs);

      oWriter.Close();

            Context.Response.Clear();
      Context.Response.ContentType 

= "text/xml";
      Context.Response.Write("<CallbackContent><![CDATA[");
      Context.Response.Write(oStringWriter.ToString().Replace("]]>", "$CARTCDATACLOSE$"));
      Context.Response.Write("]]></CallbackContent>");
      Context.Response.End();
    }

其中CallBackEventArgs的Parameter提供了便利,获取参数集合的第一个参数,参数名为Cart_congrolID_Callback_Param.
我们可以打开url来验证这一切xxx.aspx?Cart_Callback1_Callback_Param=none
可以看到会生成xml格式的数据,其就是我们要回调的数据.数据用XMLHttpRequest对象异步取到以后,就开始解析xml文件.然后把值赋给CallBack控件(即div对象的innerHTML属性).看到这个的话,大的方向就找到,其他功能再研究.

相关知识

MFC控件:树形控件(CTreeCtrl)
LabVIEW界面设计之控件美化
C#Winform窗体界面美化控件之IrisSkin4
STM32之littlevGL系列教程:图片控件(lv
自定义(滑动条)input[type=“range”]样式
android 控件花屏问题
Delphi 7皮肤控件VCLSkin 5.60的使用
bootstarp 的表单控件大小设置和class='form
vant时间控件的使用
[VC++]为自定义控件添加ToolTip

网址: ComponentArt控件分析之CallBack(1) https://www.huajiangbk.com/newsview2160907.html

所属分类:花卉
上一篇: 含笑花的古代雅称
下一篇: 王金腾名字测试评分

推荐分享