构建自定义控件之五——自定义控件集成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——返回结果到客户端。

之前有一篇随笔讲该接口的使用以及回调。

这几天凑轻松学了点东西,后面还有些知识想去学习下,只是工作看来不允许了,由于个人能力有限,接下来的一个月可能会不分上班和下班的工作了,其实工作的时候也在学东西。

自定义控件还有很多东西要学,比如后边还有 控件的设计时属性,模板化数据绑定控件,等等。先忙完手里的工作再看吧!

代码下载