我的编程空间,编程开发者的网络收藏夹
学习永远不晚

ASP.NET如何自定义控件开发

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

ASP.NET如何自定义控件开发

这篇文章主要为大家展示了“ASP.NET如何自定义控件开发”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“ASP.NET如何自定义控件开发”这篇文章吧。

该控件的功能如下:

显示服务端时间,并不停更新

通过手动点击刷新按钮以AJAX获取服务端***时间

能拖动

能记住在页面上的位置,页面回传后位置不变

能配置一个定时时间,一到这个时间,自动回传触发用户自定义的事件,

首先新建一个类库项目HampWebControl,再新建一个类叫TipTime1,继承WebControl类。如果不是从已有控件中继承,一般就继承WebControl类,它是所有ASP.NET服务端控件的基类。

ASP.NET如何自定义控件开发

我们编译这个项目,再新建一个网站项目,引用HampWebControl项目,新建页面,在工具箱中拖一个TipTime1控件到页面上。

ASP.NET如何自定义控件开发

我们运行该页面,就会发现HTML代码如下:

ASP.NET如何自定义控件开发

就是说默认是呈现成一个span标签,可以通过重载WebControl基类的TagKey属性来改变。

ASP.NET如何自定义控件开发

这样呈现在页面上就是个DIV。 HtmlTextWriterTag是个枚举,包含了很多HTML标签。

WebControl基类的Render用来呈现内容,重载它便可以往页面上呈现任何自定义的标签。

ASP.NET如何自定义控件开发

这样在页面上就显示了一个a标签,如下图所示:

ASP.NET如何自定义控件开发

注意看,这时a标签是在DIV外面,如何将它放到DIV里面呢?这就要重载WebControl基类的RenderContents方法

ASP.NET如何自定义控件开发

这样这个a标签就在div里面了,如下图所示:

ASP.NET如何自定义控件开发

接下来为最外围的DIV加一些样式,重载基类的AddAttributesToRender方法

ASP.NET如何自定义控件开发

这里有两种写法,利用HtmlTextWriterStyle枚举或者直接写CSS属性名。

到这里大家了解了自定义控件如何呈现在页面上。我们再新建一个类TipTime2,把依旧重载TagKey为DIV,然后重载RenderContents,显示一个span标签与一个input标签。

ASP.NET如何自定义控件开发

这样页面上显示了当前服务端的时间与一个按钮,如图所示:
ASP.NET如何自定义控件开发

接下来我们来让用户可以配置按钮上的文字,为类TipTime2增加一个Text属性:

ASP.NET如何自定义控件开发

同时将呈现按钮的代码改成:

ASP.NET如何自定义控件开发

这样Text属性便出现在设计视图的属性窗口。

ASP.NET如何自定义控件开发

修改Text的值,页面上按钮上的文本也跟着变了。注意Text属性是存储在ViewState中,这样保证了回发后值不会丢失。

现在的问题是时间不会变,我们得用javascript来改变它的值。新建一个JS文件TipTime2.js。

这里先要说明的是,项目中已有一个JS文件__WebControlBase.js,里面是一些公用的JS方法,比如绑定事件、获取控件坐标等,所有的方法都是

该方法的扩展方法:var HampWebControl=function(){ }

    //停止事件冒泡      HampWebControl.prototype.StopBubble = function(e) {          if (e && e.stopPropagation) {            e.stopPropagation();          } else   {              window.event.cancelBubble = true;          }      }

这样可以减少全局变量,尽可能避免与其它js代码的变量重名。我将每个控件作为HampWebControl方法的一个扩展方法存在,同时每个控件对
应一个数组,用以存储页面上所有该控件的js对象。每个控件对应一个Refresh方法,用以重新绑定事件,这是为了解决回传后的问题。

ASP.NET如何自定义控件开发
现在控件呈现成HTML的结构是<div><span/><input/></div>,有3个标签,我们需要用3个变量来分别存储它们的DOM对象,方便以后操作。

ASP.NET如何自定义控件开发

后台对HTML标签命名时以当前控件的ClientID开头,后面根据需要加后缀,这样可以一定程度上防止标签重名。由后台将控件的ClientID传过来,这样便可以获取所有DOM对象。拖动效果利用的是现成js方法,属于纯javascript效果,这里就不展开讨论了,有兴趣的童鞋可以查看示例项目源码。

ASP.NET如何自定义控件开发

该方法是由后台注册脚本来调用的,如果在数组中已存在就取该对象,否则重新new一个。并调用初始化与绑定事件方法。

这时需要在后台注册该js文件才行。关键的操作时将该文件的“生成操作”属性设置为“嵌入的资源”,使得编译的时候该js文件会作为DLL文件的一部分。

ASP.NET如何自定义控件开发

接下来需要声明所需的资源文件,严格按文件夹的结构来命名。这里注册了2个JS文件:公用JS文件__WebControlBase.js与控件专用的JS文件TipTime2.js。

ASP.NET如何自定义控件开发

然后在代码中注册脚本即可。

ASP.NET如何自定义控件开发

在《道不远人 深入解析ASP.NET2.0控件开发》这本书中,注册脚本文件的代码是放在OnPreRender方法中,但是实际应用中我发现,如果将自定义控件放在UpdatePanel控件中,就会引发一些问题,所以我都放在OnLoad方法中去注册脚本文件。

注意注册脚本文件这里用了2种不同的方法。

第1种是循环Head标签里面是否存在了脚本,如果不存在,就插入一个<script>标签。

第2种直接调用.NET的注册方法。

/// <summary>        /// 向页面注册公共jacascript文件          /// </summary>          /// <param name="control">控件对象</param>        internal static void RegisterCommonJSFile(Control control)          {              //注册jacascript文件              String jslink = "<script class="lazy" data-src='" +                          control.Page.ClientScript.GetWebResourceUrl(control.GetType(),                            "HampWebControl.includes.__WebControlBase.js")                          + "' type='text/javascript' ></script>";              Register(jslink,control);          }           /// <summary>          /// 注册资源          /// </summary>         /// <param name="strLink">资源字符串</param>        private static void Register(string strLink, Control control)           {              //为了保证资源只注册一次,循环比较,已存在了就不添加              Boolean flag = false;              for (Int32 i = 0; i < control.Page.Header.Controls.Count; i++)            {              LiteralControl lc = control.Page.Header.Controls[i] as LiteralControl;                  if (lc != null)                {                      if (lc.Text == strLink)                    {                          flag = true;                        break;                      }                  }              }              if (!flag)              {                  LiteralControl include = new LiteralControl(strLink);                control.Page.Header.Controls.Add(include);              }        }

第1种是用于注册公用的资源文件,第2种用于注册该控件特有的资源文件。 因为第2种方法只能保证多个该控件对象只注册一个脚本,但不能保证其它控件也
重复注册了该脚本,所以为了保证公用的资源文件只注册一次,就用第1种方式。
下一步就是注册要执行的脚本代码:
ASP.NET如何自定义控件开发

这里如果控件是隐藏的,就不注册。其实如果控件时放在其它容器控件中,比如Panel,而父容器控件设置为隐藏,那么该控件也不可见,但是依旧执行了注册上面的脚本的代码,所以要在前台Init方法中去判断相应的DOM对象是否存在,这里就没有多做判断。

***设置一下样式,使之变为浮动,则控件在页面上便能拖动了。

ASP.NET如何自定义控件开发

以上是“ASP.NET如何自定义控件开发”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网行业资讯频道!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

ASP.NET如何自定义控件开发

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

ASP.NET如何自定义控件开发

这篇文章主要为大家展示了“ASP.NET如何自定义控件开发”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“ASP.NET如何自定义控件开发”这篇文章吧。该控件的功能如下:1.显示服务端时间,并不停
2023-06-17

winform怎么自定义控件开发

在WinForms中自定义控件开发,可以按照以下步骤进行:1. 创建新的类,继承自现有的控件类,比如`UserControl`或`Control`。2. 在类中添加私有变量和属性,用于存储控件的状态和数据。3. 重写基类的方法,以实现控件的
2023-10-10

winform如何自定义控件

在WinForms中自定义控件通常涉及以下步骤:创建自定义控件类:创建一个继承自现有控件(如Control或Panel)的新类,该类将作为自定义控件的基类。添加自定义控件的属性和方法:在自定义控件类中添加需要的属性和方法,以实现控件的特定功
winform如何自定义控件
2024-04-09

Android如何自定义Switch开关按钮控件

这篇“Android如何自定义Switch开关按钮控件”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Android如何自定义
2023-07-02

Android开发之自定义控件用法详解

本文实例讲述了Android开发之自定义控件用法。分享给大家供大家参考,具体如下: 今天和大家分享下组合控件的使用。很多时候android自定义控件并不能满足需求,如何做呢?很多方法,可以自己绘制一个,可以通过继承基础控件来重写某些环节,当
2022-06-06

如何使用maven自定义插件开发

这篇文章主要介绍了如何使用maven自定义插件开发的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇如何使用maven自定义插件开发文章都会有所收获,下面我们一起来看看吧。Maven 插件的命名规范一般来说,我们会
2023-07-02

Android如何自定义评分控件

今天小编给大家分享一下Android如何自定义评分控件的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。自定义参数为了方便扩展,
2023-06-30

WPF自定义控件如何实现

今天小编给大家分享一下WPF自定义控件如何实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。方式一:基于现有控件进行扩展,如
2023-07-05

wpf如何自定义控件属性

在WPF中,可以通过创建自定义控件继承自现有的控件,并添加自定义属性来实现自定义控件属性。以下是一个简单的示例,展示了如何创建一个自定义控件MyButton,并为其添加一个自定义属性MyProperty:创建一个新的WPF UserCon
2023-10-24

winform自定义控件开发的方法是什么

在WinForms中开发自定义控件的方法如下:1. 创建一个新的类并继承自现有的控件类(如Control、UserControl)或者继承自接口(如IComponent、IDisposable)。2. 添加必要的字段和属性来存储和管理控件的
2023-09-09

Android开发怎么自定义实时图表控件

本文小编为大家详细介绍“Android开发怎么自定义实时图表控件”,内容详细,步骤清晰,细节处理妥当,希望这篇“Android开发怎么自定义实时图表控件”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。演示环境开发工
2023-07-02

android怎么自定义开关控件

要自定义开关控件,可以使用以下步骤:1. 创建一个自定义的开关控件类,继承自Switch或CompoundButton类。2. 在自定义控件类中定义开关的背景、滑块等样式属性。可以使用drawable资源文件为控件设置背景,也可以通过代码绘
2023-08-16

C#怎么为控件添加自定义事件及自定义触发

本文小编为大家详细介绍“C#怎么为控件添加自定义事件及自定义触发”,内容详细,步骤清晰,细节处理妥当,希望这篇“C#怎么为控件添加自定义事件及自定义触发”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。先随便搞个事件
2023-06-30

ASP.NET Core MVC如何自定义Tag Helpers

这篇文章主要为大家展示了“ASP.NET Core MVC如何自定义Tag Helpers”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“ASP.NET Core MVC如何自定义Tag Help
2023-06-29

Android如何自定义View歌词控件

本篇内容介绍了“Android如何自定义View歌词控件”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!目录前言一、 歌词解析1.歌词实体类L
2023-06-20

qt如何自定义可拖动控件

要自定义可拖动的控件,可以按照以下步骤进行操作:1. 创建一个继承自QWidget或QFrame的自定义控件类,例如MyDraggableWidget。2. 在自定义控件类的构造函数中设置控件的基本属性,例如设置控件为可拖动的,设置鼠标追踪
2023-10-10

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录