当前位置: 首页 > news >正文

自定义控件开发

  最近一段时间一直在学习自定义控件学习相关的资料,个人觉得在自定义开发过程中首先要明白自定义控件中各个事件调用的顺序,只有在了解事件调用顺序的基础上,才能够有的放矢的去在适当的时候加载适当的控件和事件,下面首先说明事件调用的顺序,这个也是从网上摘录

    1. CreateChildControls;
    2. Init();
    3. TrackViewState;
    4. LoadViewStates();
    5. LoadPostData();
    6. Onload();
    7. RaisePostDataChangeEvent();
    8. OnbubbleEvent();
    9. OnpreRender();
    10. SaveViewState();
    11. RenderControl();
    12. Render();
      1. RenderBeginTag();
      2. AddAttributeToRender();
      3. CreateControlStyle();
      4. RenderContents();
      5. RenderChildren();
      6. RenderEndTag();
    13. OnUnload();

然后我们要掌握一些Ajax回发的原理,现在做的控件都流行用局部刷新技术,当然在我们的控件中如何去放开属性是比较容易的,事件的几种注册方式比较容易下面说说自定义控件注入脚本代码的方式:

ClientScriptManager类公开了使用客户端脚本的主要应用程序接口,HttpBrowserCapabilities类方便我们开发不同种类浏览器使用的控件,Ajax让我们实现自定义控件不必将包含控件的页面提交到Web服务器端就与其通讯。

关于ClientScriptManager

ClientScriptManager支持添加javascript到页面的方法:

1)       RegisterArrayDeclaration——添加javascript数组到页面;

2)       RegisterClientScriptBlock——添加javascript脚本到页面的起始服务器端<form>标签后;

3)       RegisterClientScriptInclude——添加外部js文件引用到页面的起始服务器端<form>标签后;

4)       RegisterClientScriptResource——添加已编译到程序集中的js到页面中;

5)       RegisterExpandAttribute——添加为页面中某个元素附加扩展属性的脚本;

6)       RegisterHiddenField——在页面的起始服务器端<form>标签后添加一个隐藏表单域;

7)       RegisterOnSubmitStatement——添加在页面回传服务器之前执行的js脚本;

8)       RegisterStartUpScript——在页面的结束服务器端<form>标签前添加js脚本。

这些方法都是可以安全调用多次的,不会造成重复添加。

另外有一些属性可以用来检测一段脚本是否已经在页面中注册:

1)       IsClientScriptBlockRegistered——当一段脚本通过RegisterClientScriptBlock()方法注册到页面时,返回true

2)       IsClientScriptIncludeRegistered——当一个外部脚本文件引用已经通过RegisterClientScriptInclude()方法注册到页面中时,返回true

3)       IsOnsubmitStatementRegistered——当一段脚本已经通过RegisterOnSubmitStatement()方法注册到页面中时,返回true

4)       IsStartupScritpRegistered——党一段脚本已经通过RegisterStartupScript()方法注册到页面时,返回true

检测浏览器功能

HttpBrowserCapabilities对象通过Request对象公开,可以使用Request.Browser获得起对象的引用。e.g.

if (Request.Browser.Browser.Equals("IE") && Request.Browser.MajorVersion >= 5)

{

    Page.Response.Write(Request.Browser.Browser);

}

HttpBrowerCapabilities对象使用浏览器发送的User-Agent头来检测浏览器的功能

 

创建Ajax控件

要在自定义控件中实现Ajax,需要执行以下步骤:

1.       生成引发Ajax调用的JavaScript

2.       在服务器端创建响应Ajax调用的方法;

3.       在浏览器上创建Javascript,显示服务器端返回的结果。

为了执行服务器端的方法而引发Ajax调用,然后将服务器端执行的结果返回到客户端显示。

通过Page.ClientScripts.GetCallBackEventReference()方法创建引发Ajax调用的javascript,该方法返回一个表示javascript函数调用的字符串,如示:

WebForm_DoCallBack(‘mycontrol’,null,showResult,null,showError,false)

GetCallBackEventReference()方法的一些重载参数:

Control——引发Ajax的控件;

Argument——在Ajax调用中传给服务器端的参数;

clientCallBack——当结果从Web服务器端返回时执行的javascript函数名;

context——Ajax调用完成后传回clientCallback()clientErrorCallback()方法的参数

clientErrorCallback——Ajax调用在服务期端产生错误结果时执行的javascript函数名

useAsync——为true时,Ajax调用异步执行。

需要实现在服务器端相应Ajax调用的方法,要达到这一目的,需要实现ICallbackEventHandler接口。

接口ICallbackEventHandler的两个方法:

RaiseCallbackEvent——回调时首先执行该方法进行处理;

GetCallbackResult——返回结果到客户端。

 

先写到这里,去吃早饭了,以后再继续完善。希望各位看客见谅。

 

转载于:https://www.cnblogs.com/549504182/archive/2010/05/02/1725882.html

相关文章:

  • 争夺NO.1........
  • 6666
  • 用Eclipse平台进行c/c++开发
  • NHibernate测试的几个小问题
  • Qt 第一章 建立连接
  • 每日学习日记5.6
  • 5.9 学习日记 万事成蹉
  • 解读B2C公司的线下之旅
  • Dropbox被墙了,幸亏还有类似服务SugarSync
  • 泛型类中的栈Stack
  • JDBC+Servlet+JSP整合开发之31-JSP项目实战
  • SVN安装配置说明
  • SSRS表达式示例
  • 管理思想演变总趋势
  • [日志]你看过骂人的歇后语没?
  • [PHP内核探索]PHP中的哈希表
  • Android开源项目规范总结
  • Apache Spark Streaming 使用实例
  • C++类的相互关联
  • js算法-归并排序(merge_sort)
  • oldjun 检测网站的经验
  • Spring Cloud中负载均衡器概览
  • Vue 重置组件到初始状态
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • 对超线程几个不同角度的解释
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 和 || 运算
  • 基于webpack 的 vue 多页架构
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 如何胜任知名企业的商业数据分析师?
  • 通信类
  • 我这样减少了26.5M Java内存!
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • #mysql 8.0 踩坑日记
  • #我与Java虚拟机的故事#连载16:打开Java世界大门的钥匙
  • $.ajax,axios,fetch三种ajax请求的区别
  • $.proxy和$.extend
  • (27)4.8 习题课
  • (接口封装)
  • (九)One-Wire总线-DS18B20
  • (力扣)1314.矩阵区域和
  • (太强大了) - Linux 性能监控、测试、优化工具
  • (转)Unity3DUnity3D在android下调试
  • (最优化理论与方法)第二章最优化所需基础知识-第三节:重要凸集举例
  • .NET Core/Framework 创建委托以大幅度提高反射调用的性能
  • .NET 解决重复提交问题
  • .NET 设计一套高性能的弱事件机制
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地中转一个自定义的弱事件(可让任意 CLR 事件成为弱事件)
  • .net访问oracle数据库性能问题
  • .net流程开发平台的一些难点(1)
  • .NET企业级应用架构设计系列之开场白