浅谈WebControl中的ScriptManager与ClientScriptManager的区别(附上一个弹出多选的控件源代码)
2008-08-26 12:29
465 查看
在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操作时控件都要进行资源文件的注册。
贴出代码如下:(弹出多选的CheckBox功能控件)
1.CS文件
Code
if(!this.ChechHelper){
ChechHelper = function(){
var helpers = new Array();
function _chechHelper(){
var me = this;
this._inputTextID = null;
this._checkBoxListID = null;
this._separator = ",";
this.setInputTextID = function(e) { me._inputTextID = e; }
this.setcheckBoxListID = function(e) { me._checkBoxListID = e; }
this.setSeparator = function(e) { me._separator = e; }
this.oncheckClick = function(e){
var evt = e || window.event; // FF || IE
var obj = evt.target || evt.srcElement // FF || IE
me.getChechedText();
}
this.getChechedText = function(){
var text = document.getElementById(me._inputTextID);
text.value = "";
var check = document.getElementById(me._checkBoxListID);
if(check == null){
return;
}
var es = check.getElementsByTagName("INPUT");
for (i=0; i< es.length; i++){
if (es[i].type == "checkbox") {
if(es[i].checked){
if(text.value.length > 0){
text.value += me._separator;
}
var td = es[i].parentElement;
var las = td.getElementsByTagName("LABEL");
if(las != null && las.length > 0) {
text.value += las[0].innerHTML;
}
}
}
}
}
this.init = function(){
var check = document.getElementById(me._checkBoxListID);
if(check == null){
return;
}
var es = check.getElementsByTagName("INPUT");
for (i=0; i< es.length; i++){
if (es[i].type == "checkbox") {
es[i].attachEvent("onclick",me.oncheckClick);
}
}
}
}
return {
register: function(inputID,checkBoxListID) {
var th = new _chechHelper();
th.setInputTextID(inputID);
th.setcheckBoxListID(checkBoxListID);
th.init();
helpers.push(th);
}
}
}();
}
经过不断的调试和翻阅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操作时控件都要进行资源文件的注册。
贴出代码如下:(弹出多选的CheckBox功能控件)
1.CS文件
Code
if(!this.ChechHelper){
ChechHelper = function(){
var helpers = new Array();
function _chechHelper(){
var me = this;
this._inputTextID = null;
this._checkBoxListID = null;
this._separator = ",";
this.setInputTextID = function(e) { me._inputTextID = e; }
this.setcheckBoxListID = function(e) { me._checkBoxListID = e; }
this.setSeparator = function(e) { me._separator = e; }
this.oncheckClick = function(e){
var evt = e || window.event; // FF || IE
var obj = evt.target || evt.srcElement // FF || IE
me.getChechedText();
}
this.getChechedText = function(){
var text = document.getElementById(me._inputTextID);
text.value = "";
var check = document.getElementById(me._checkBoxListID);
if(check == null){
return;
}
var es = check.getElementsByTagName("INPUT");
for (i=0; i< es.length; i++){
if (es[i].type == "checkbox") {
if(es[i].checked){
if(text.value.length > 0){
text.value += me._separator;
}
var td = es[i].parentElement;
var las = td.getElementsByTagName("LABEL");
if(las != null && las.length > 0) {
text.value += las[0].innerHTML;
}
}
}
}
}
this.init = function(){
var check = document.getElementById(me._checkBoxListID);
if(check == null){
return;
}
var es = check.getElementsByTagName("INPUT");
for (i=0; i< es.length; i++){
if (es[i].type == "checkbox") {
es[i].attachEvent("onclick",me.oncheckClick);
}
}
}
}
return {
register: function(inputID,checkBoxListID) {
var th = new _chechHelper();
th.setInputTextID(inputID);
th.setcheckBoxListID(checkBoxListID);
th.init();
helpers.push(th);
}
}
}();
}
相关文章推荐
- 浅谈ScriptManager与ClientScriptManager的区别
- SSRS:关于“在 Web 窗体上报表查看器 Web 控件需要 System.Web.UI.ScriptManager”
- 关于AJAX的ScriptManager.RegisterClientScriptBlock无法弹出对话框的解决方法【归类】
- 回发或回调参数无效。在配置中使用 或在页面中使用 启用了事件验证。出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用 ClientScriptManager.RegisterF
- ScriptManager.RegisterStartupScript/ClientScript.RegisterStartupScript/Response.Write三种加载脚本的区别
- ClientScriptManager与ScriptManager向客户端注册脚本的区别
- 回发或回调参数无效。在配置中使用 或在页面中使用 启用了事件验证。出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用 ClientScriptManager.RegisterForEventValidation 方法来注册回发或回调数据以进行验证。
- 不能使用ASP.NET验证控件---WebForms UnobtrusiveValidationMode 需要“jquery”ScriptResourceMapping。请添加一个名为 jquery (区分大小写)的 ScriptRes
- 【.Net码农】在 Web 窗体上报表查看器 Web 控件需要 System.Web.UI.ScriptManager
- ClientScriptManager GetWebResourceUrl 方法
- WebControlManager的源代码
- Page.ClientScript、ClientScript、ScriptManager、ClientScriptManager 区别是什么
- 回发或回调参数无效。在配置中使用 或在页面中使用 启用了事件验证。出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用 ClientScriptManager.RegisterForEvent
- 回发或回调参数无效。在配置中使用 或在页面中使用 启用了事件验证。出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用 ClientScriptManager.RegisterForEventValidation 方法来注册回发或回调数据以进行验证。
- Wuyin.ShoesManager.Start 程序源代码(包括只启动一个实例及使用XP控件技术)
- 程序运行出现错误:System.Web.UI.ClientScriptManager.EnsureEventValidationFieldLoaded
- Delphi TControl 类(ClientWidth和Width区别)(SetEditMode控件是否可见)
- ASP.NET2.0中ClientScriptManager的用法(使用ASP.NET 2.0 AJAX 弹出对话框)
- ASP.NET2.0中ClientScriptManager的用法(使用ASP.NET 2.0 AJAX 弹出对话框)
- ClientScriptManager与ScriptManager向客户端注册脚本的区别