ScriptManager与ClientScriptManager的区别
在asp.net中经常要写些特殊的WebControl,并应用到不同的场合,偶然发现将自己写的控件放置到ajax的UpdatePanel中就出错。
经过不断的调试和翻阅msdn,原来是正常使用Page刷新时可以页面向客户端注册脚本块,而在UpdatePanel刷新时不能注册它以外的内容,所以在updatePanel中的控件没有将js资源文件注册到客户端。
于是就产生了ScriptManager与ClientScript的区别
- System.Web.UI.ScriptManager
为 Web 和应用程序服务管理 ASP.NET AJAX 脚本库和脚本文件、部分页面呈现以及客户端代理类生成。
向客户端注册资源文件的方法:RegisterClientScriptResource
每次发生回发时都向 System.Web.UI.ScriptManager 控件注册嵌入程序集中的客户端脚本文件。
向客户端注册启动脚本块的方法:RegisterStartupScript
为每个异步回发向 System.Web.UI.ScriptManager 控件注册一个启动脚本块,并将该脚本块添加到页面中.
2. System.Web.UI.Control.Page.ClientScript (返回一个System.Web.UI.ClientScriptManager)
获取用于管理脚本、注册脚本和向页添加脚本的 System.Web.UI.ClientScriptManager 对象
向客户端注册资源文件的方法:RegisterClientScriptInclude
使用类型、键和 URL 向 System.Web.UI.Page 对象注册客户端脚本包含。
向客户端注册启动脚本块的方法:RegisterStartupScript
使用类型、键、脚本文本和指示是否添加脚本标记的布尔值向 System.Web.UI.Page 对象注册启动脚本。
通过以上的定义,就会发现ScriptManager适用在特殊的场合,那么我们在控件中如何来进行区分应该使用哪一个呢?其实可以通过寻找控件的parent,判断是否有updatepanel,如果有就用ScriptManager;没有的话当然用ClientScript,避免每次postback操作时控件都要进行资源文件的注册。