您的位置:首页 > 编程语言

浅谈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);

}

}

}();

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐