构建自定义控件之五——自定义控件集成javascript
主要学习ClientScriptManager类的方法和属性,学习使用HttpBrowserCapabilities类来检测不同的浏览器版本,学习Ajax。ClientScriptManager类公开了使用客户端脚本的主要应用程序接口,HttpBrowserCapabilities类方便我们开发不同种类浏览器使用的控件,Ajax让我们实现自定义控件不必将包含控件的页面提交到Web服务器端就与其通讯。
5.1关于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;
5.2 检测浏览器功能
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头来检测浏览器的功能
代码示例:
NewWindowLink.cs、WebWindow.cs、ClientTab.cs
5.3 创建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——返回结果到客户端。
之前有一篇随笔讲该接口的使用以及回调。
这几天凑轻松学了点东西,后面还有些知识想去学习下,只是工作看来不允许了,由于个人能力有限,接下来的一个月可能会不分上班和下班的工作了,其实工作的时候也在学东西。
自定义控件还有很多东西要学,比如后边还有 控件的设计时属性,模板化数据绑定控件,等等。先忙完手里的工作再看吧!