热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

扩展AJAXControlToolkit中的控件

需求:TabContainer容器中的TabPanel类本身就包含了Enabled属性,也可以使用JavaScript方法set_enabled(X)来设置Enabled属性,如果某个TabPanel的这个属性为false的话,这个TabPanel就不会显示在TabContainer中,这与一般控件的“Enabled”

需求:

TabContainer容器中的TabPanel类本身就包含了Enabled属性,也可以使用Javascript方法 set_enabled(X)来设置Enabled属性,如果某个TabPanel的这个属性为false的话,这个TabPanel就不会显 示在TabContainer中,这与一般控件的“Enabled”属性不太一样,我认为叫它“Visiable”会更加恰当 。如下图所示:

有时候这并不符合我们的需求,所以,在本例中,我们将为其添加Disabled功能,使TabPanel控件可 以变成灰色,而不响应客户端事件。

1. 添加服务端属性:

首先我们找到TabPanel.cs也就是TabPanel类,在其中添加如下属性来代表TabPanel是“恢复启用”还 是“变灰禁用”状态:

        [DefaultValue("")]
        [Category("Behavior")]
        [ExtenderControlProperty]
        [ClientPropertyName("disabled")]
        public bool Disabled 
        {
            get { return (bool)(ViewState["Disabled"] ?? false); }
            set { ViewState["Disabled"] = value; }
        }

        internal bool Active
        {
            get { return _active; }
            set { _active = value; }
        }

在属性中,我们设置ClientPropertyName为“disabled”,也就是将这个属性映射到Javascript Behavior代码中的_disabled属性,并以ViewState为状态保存容器。

ASP.NET AJAX Advance Tips & Tricks (8) 扩展AJAX Control Toolkit中的控件(2)

时间:2011-10-18 cnblogs LanceZhang

2. 添加客户端属性

由于AJAX Control Toolkit中的控件行为大都是由Javascript Behavior实现的,接下来,我们向Tab 控件相应的Javascript Behavior中添加客户端属性。

找到AjaxControlToolkit.TabPanel 的定义,添加上面提到的_disabled成员变量,如下:

AjaxControlToolkit.TabPanel = function(element) {
    AjaxControlToolkit.TabPanel.initializeBase(this, [element]);
    this._active = false;
    this._tab = null;
    this._headerOuter = null;
    this._headerInner = null;
    this._header = null;
    this._owner = null;
    this._enabled = true;
    this._disabled = false; //test add
    this._tabIndex = -1;
    this._dynamicContextKey = null;
    this._dynamicServicePath = null;
    this._dynamicServiceMethod = null;
    this._dynamicPopulateBehavior = null;
    this._scrollBars = AjaxControlToolkit.ScrollBars.None;
    this._header_onclick$delegate = Function.createDelegate(this,  this._header_onclick);
    this._header_onmouseover$delegate = Function.createDelegate(this,  this._header_onmouseover);
    this._header_onmouseout$delegate = Function.createDelegate(this,  this._header_onmouseout);
    this._header_onmousedown$delegate = Function.createDelegate(this,  this._header_onmousedown);
    this._dynamicPopulate_onpopulated$delegate = Function.createDelegate(this,  this._dynamicPopulate_onpopulated);
    this._oncancel$delegate = Function.createDelegate(this, this._oncancel);
}

接下来,我们还需要在AjaxControlToolkit.TabPanel.prototype 中添加_disabled属性的访问器:

    get_disabled: function() {
        return this._disabled;
    },

    set_disabled: function(value) {
        if (value != this._disabled) {
            this._disabled = value;

            if (this.get_isInitialized()) {
                if (!this._disabled) {
                    this._regular();
                } else {
                    this._grayout();
                }
            }
            this.raisePropertyChanged("disabled");
        }
    },

有了get和set访问器,我们就可以在客户端使用

$find('<%=Tabs.ClientID%>').get_tabs()[2].set_disabled(true);

来设置该属性

ASP.NET AJAX Advance Tips & Tricks (8) 扩展AJAX Control Toolkit中的控件(3)

时间:2011-10-18 cnblogs LanceZhang

3. 添加客户端行为

有了属性,我们接下来定义属性所代表的行为,在这里,我们使用_regular()和_grayout()两个方法 来进行TabPanel的“恢复启用”和“变灰禁用”的状态设置:

    _regular: function() {
        this._tab.disabled = false;
    },

    _grayout: function() {
        this._tab.disabled = true;
        this.get_headerTab().disabled = true;
        if (this._get_active()) {

            var next = this._owner.getNearestTab(false);
            if (!!next) {
                this._owner.set_activeTab(next);
            }
        }
        this._deactivate();
    }

这两个方法由上面代码中高亮的部分调用。

4. 编译测试

修改工作完成后,我们重新编译AjaxControlToolkit.dll,并覆盖项目中原有的引用,即可在网站中 使用扩展后的控件:

<%@ Page Language="C#" %>



    


    
    


        
        
        
            
                
                    grid view
                

            
            
                
                    ………………
                

            
            
                
                    ………………
                

            
            
                
                    ………………
                

            
        
    

    

    

    

效果如下图所示,TabPanel被真正的Disable了:

全部代码请访问如下链接获取:http://forums.asp.net/p/1388315/2964536.aspx#2964536


推荐阅读
  • 本文详细探讨了JavaScript中的闭包与柯里化技术,这两者是函数式编程的重要组成部分,对提升代码的灵活性和可维护性具有重要作用。 ... [详细]
  • Docker的安全基准
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 在Linux系统中配置并启动ActiveMQ
    本文详细介绍了如何在Linux环境中安装和配置ActiveMQ,包括端口开放及防火墙设置。通过本文,您可以掌握完整的ActiveMQ部署流程,确保其在网络环境中正常运行。 ... [详细]
  • 本文介绍如何通过Windows批处理脚本定期检查并重启Java应用程序,确保其持续稳定运行。脚本每30分钟检查一次,并在需要时重启Java程序。同时,它会将任务结果发送到Redis。 ... [详细]
  • 本文探讨了在不使用服务器控件的情况下,如何通过多种方法获取并修改页面中的HTML元素值。除了常见的AJAX方式,还介绍了其他可行的技术方案。 ... [详细]
  • 本文讨论了如何根据特定条件动态显示或隐藏文件上传控件中的默认文本(如“未选择文件”)。通过结合CSS和JavaScript,可以实现更灵活的用户界面。 ... [详细]
  • 本文探讨了领域驱动设计(DDD)的核心概念、应用场景及其实现方式,详细介绍了其在企业级软件开发中的优势和挑战。通过对比事务脚本与领域模型,展示了DDD如何提升系统的可维护性和扩展性。 ... [详细]
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
  • 作为一名专业的Web前端工程师,掌握HTML和CSS的命名规范是至关重要的。良好的命名习惯不仅有助于提高代码的可读性和维护性,还能促进团队协作。本文将详细介绍Web前端开发中常用的HTML和CSS命名规范,并提供实用的建议。 ... [详细]
  • 本文探讨了在 ASP.NET MVC 5 中实现松耦合组件的方法。通过分离关注点,应用程序的各个组件可以更加独立且易于维护和测试。文中详细介绍了依赖项注入(DI)及其在实现松耦合中的作用。 ... [详细]
  • Startup 类配置服务和应用的请求管道。Startup类ASP.NETCore应用使用 Startup 类,按照约定命名为 Startup。 Startup 类:可选择性地包括 ... [详细]
  • 本文探讨了如何在日常工作中通过优化效率和深入研究核心技术,将技术和知识转化为实际收益。文章结合个人经验,分享了提高工作效率、掌握高价值技能以及选择合适工作环境的方法,帮助读者更好地实现技术变现。 ... [详细]
  • 本文探讨了在使用Knockout.js创建自定义绑定处理器时遇到的一个常见问题:尽管两个绑定使用了相同的初始化代码并绑定到了同一个值,但它们的初始化表现却不同。 ... [详细]
  • 我有这种ajax$.ajax({type:"POST",url:"bee_sesi_edit.php&# ... [详细]
author-avatar
别样青年别样范儿bo
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有