Page.ClientScript的几个常用函数
在做WebGIS二次开发时遇到了许多问题,其中之一就是关于Page.ClientScript下几个函数的理解。上网查询了一些资料,在此进行总结,希望对自己有用。
Page.ClientScript是获取用于管理脚本、注册脚本和向页添加脚本的ClientScriptManager对象。
1.Page.ClientScript.GetCallbackEventReference(Control control, string argument,string clientCallbak,string context,string clientErrorCallbak,bool useAsync)
功能:实现服务器数据回传,局部刷新客户端。
参数1:指定了服务器端将要处理回调的目标对象,即处理客户端回调的服务器端控件。该控件必须实现 ICallbackEventHandler 接口并提供 RaiseCallbackEvent 方法。 ICallbackEventHandler 提供2个方法,RaiseCallbackEvent(string eventArgument)和GetCallbackResult,用来获取回调参数和返回处理值。如果传入的是this,则表示页面本 身。也可以传入任何实现了ICallbackEventHandler的页面控件(page control)的引用。在任何情况下,客户端的提交动作(submit action)会提交至和标准回传(postback)机制相同的ASPX页面。
参数2:是一个JavaScript常量表达式,表示页面传给服务器的输入数据。如将一个下拉列表当前选中元素的值传入"document.getElementById['cboEmployees'].value"。
参数3:是一个用户定义在<script>块中的JavaScript回调(callback)函数名。回调(callback)执行后,此函数最终负责页面的更新。
参数4:可选参数。可用来指定错误处理函数(error handler)和上下文对象(context object)。
(参考:http://blog.csdn.net/icepig/article/details/3469858)
参数5和6一般默认为 postBackError和true。相关解释比较少。
2.Page.ClientScript.RegisterClientScriptBlock(Type type, string key,string script,bool addScriptTags)
功能: 向响应发出客户端脚本块。使用类型、键、脚本文本和指示是否添加脚本标记的布尔值向 System.Web.UI.Page 对象注册客户端脚本。
参数1: 要注册的客户端脚本的类型。
参数2: 要注册的客户端脚本的键。
参数3: 要注册的客户端脚本文本。
参数4: 指示是否添加脚本标记的布尔值。
(举例请参考MSDNhttp://msdn.microsoft.com/zh-cn/library/system.web.ui.page.registerclientscriptblock(VS.90).aspx)
3.Page.ClientScript.RegisterStartupScript(Type type, string key,string script,bool addScriptTags)
功能:向响应发出客户端脚本块。使用类型、键、脚本文本和指示是否添加脚本标记的布尔值向 System.Web.UI.Page 对象注册客户端脚本。
参数1: 要注册的客户端脚本的类型。
参数2: 要注册的客户端脚本的键。
参数3: 要注册的客户端脚本文本。
参数4: 指示是否添加脚本标记的布尔值。
要往页面中呈现脚本,我们可以选择RegisterClientScriptBlock()方法或RegisterStartupScript()方法。这两个方法的参数和功能都差不多,不同之处在于它们将代码呈现在页面的不同的地方,前一个方法将客户端代码呈现在页面表单的最前面,也就是这些代码位于所有页面元素之前,这使得脚本最先被浏览器解析;后一个方法将客户端代码呈现在页面表单的最末端,页面解析这些脚本时,页面上的各种元素已经完成解析,这就使得这些脚本可以马上操作页面上的元素。所以我们常用前一个方法呈现一些不会马上执行的代码,比如声明某个按钮的Click 事件处理程序,而用后一个方法呈现页面加载完成后马上执行的代码,比如定义某个变量的初始值,对页面元素进行某种操作。
(此处参考http://bbs.nbradio.com/blog/index.php/13225/viewspace-10324.html)
需要说明的是,以上API已经过时了,可以用ClientScriptManager类中对应的方法。