浅谈ASP.NET中最简单的自定义控件

ASP.NET用户控件一般适用于产生相对静态的内容,所以没有builtin的事件支持。本文讨论用户控件返回事件的方法。

假定用户控件(UserControl.ascx)中包含按钮控件AButton,希望实现按AButton按钮时,包含该用户控件的页面可以接收到事件。为此,小鸡射手在用户控件和页面的代码中分别作了处理。

UserControl.ascx.cs中的处理:
        1. 定义public的事件委托,如ClickEventHandler;
        2. 在UserControl类中声明事件,如Click;
        3. 在UserControl类中定义引发事件的方法,如OnClick()方法;
        4. 在UserControl类的相关方法中调用引发事件的方法,如在Button_Click()中调用OnClick()。

核心代码示意如下:

代码如下:

public delegate void ClickEventHandler(object sender, EventArgs e);
        public class MyUserControl : System.Web.UI.UserControl
        {
           protected System.Web.UI.WebControls.Button AButton;
           public event ClickEventHandler Click;
           protected void OnClick(EventArgs e)
           {
               if (Click!=null) Click(this, e);
           }
           private void AButton_Click(object sender, System.EventArgs e)
           {
               this.OnClick(e);
           }
        }

包含UserControl的页面cs文件中的处理:

1. InitializeComponent()中增加事件处理程序,采用FindControl方法找到UserControl;
     2. 定义事件处理方法,在该方法中处理UserControl的事件,如UserControl_Clicked()。
核心代码示意如下:

代码如下:

private void InitializeComponent()
     {   
           this.Load += new System.EventHandler(this.Page_Load);
           MyUserControl uc = this.FindControl("myUserControlID") as MyUserControl;
           uc.Click += new ClickEventHandler(this.UserControl_Clicked);
     }
     private void UserControl_Clicked(object sender, System.EventArgs e)
     {
           // UserControl_Clicked event hanlder
     }

总结一下,其实就是将事件机制利用手工编程的方法加进去:加入一般控件IDE自动生成的代码。顺便说一下,C#的事件机制实现了Obeserver pattern,除了UI还可以用于业务层,能有效地降低对象间的耦合度,像UserControl那样,根本无需知道包含它的页面对象是谁!

(0)

相关推荐

  • Asp.net 动态加载用户自定义控件,并转换成HTML代码

    如果页面单纯的使用js来创建,要写大量的代码,而且不直观. 在asp.net中,其实我们可以创建用户自定义控件,通过Ajax请求返回用户自定义控件HTML代码. 复制代码 代码如下: public static string RangerUsControl(string controlName) { StringBuilder build = new StringBuilder(); HtmlTextWriter htmlWriter = new HtmlTextWriter(new Strin

  • asp.net DropDownList自定义控件,让你的分类更清晰

    看到Discuz是2个下拉列表进行合并的,网上找了一些资料,然后写了这个小源码,在这里和大家分享一下! 运行效果图,如下所示(深黑的地方选不中,因为那是上一级的分类): 项目结构图如下所示: Controls类库SmartDropDownList.cs代码如下所示: SmartDropDownList.cs 复制代码 代码如下: using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using Syste

  • ASP.NET中 RadioButtonList 单选按钮组控件的使用方法

    RadioButtonList 控件表示一个封装了一组单选按钮控件的列表控件. 可以使用两种类型的 ASP.NET 控件将单选按钮添加到网页上:各个 RadioButton 控件或一个 RadioButtonList 控件.这两类控件都允许用户从一小组互相排斥的预定义选项中进行选择.使用这些控件,可定义任意数目的带标签的单选按钮,并将它们水平或垂直排列. 一.常用属性 属性 值 作用 RepeatDirection Horizontal|Vertical 项的布局方向:水平方向|竖直风向 Rep

  • ASP.NET中 CheckBox复选框控件的使用

    我们可以使用两种类型的 ASP.NET 控件将复选框添加到 Web 窗体页上:单独的 CheckBox 控件或 CheckBoxList 控件.两种控件都为用户提供了一种输入布尔型数据(真或假.是或否)的方法. 这里我们单独使用CheckBox,先来看看它的属性 属性 描述 .NET AutoPostBack 规定在 Checked 属性已改变后,是否立即向服务器回传表单.默认是 false. 1.0 CausesValidation 规定点击 Button 控件时是否执行验证. 2.0 Che

  • Asp.net自定义控件之单选、多选控件

    本文实例为大家分享了Asp.net单选.复选框控件的具体实现代码,供大家参考,具体内容如下 将常用的jquery插件封装成控件也是个不错的选择. 先看看效果: 1.新建类库项目,创建数据源类 [Serializable] public class Select2Item { public bool Selected { get; set; } public string Text { get; set; } public string Value { get; set; } public Sel

  • ASP.NET单选按钮控件RadioButton常用属性和方法介绍

    1.常用属性: (1)Checked属性:用来设置或返回单选按钮是否被选中,选中时值为true,没有选中时值为false. (2)AutoCheck 属性:如果 AutoCheck 属性被设置为 true(默认),那么当选择该单选按钮时,将自动清除该组中所有其他单选按钮.对一般用户来说,不需改变该属性,采用默认值(true)即可. (3)Appearance 属性:用来获取或设置单选按钮控件的外观.当其取值为 Appearance.Button 时,将使单选按钮的外观像命令按钮一样:当选定它时,

  • asp.net 自定义控件实现无刷新上传图片,立即显示缩略图,保存图片缩略图

    如图: 点击浏览,选择图片之后,右面显示图片 第一步: 创建CtFileUpLoad.ascx 复制代码 代码如下: <%@ Control Language="C#" AutoEventWireup="true" CodeFile="CtFileUpLoad.ascx.cs" Inherits="WebParts_CtFileUpLoad" %> <table cellpadding="0&quo

  • ASP.NET中CheckBoxList复选框列表控件详细使用方法

    可以使用两种类型的 ASP.NET 控件将复选框添加到 Web 窗体页上:单独的 CheckBox 控件或 CheckBoxList 控件.两种控件都为用户提供了一种输入布尔型数据(真或假.是或否)的方法. 本文主要介绍CheckBoxList,不言而喻,看到List就知道是一个列表(集合),一个控件可以包含多个CheckBox,下面让我们来看看具体的用法. 1.绑定数据 复制代码 代码如下: this.lngCatalogID.DataSource = dt; //这里我绑到DataTable

  • asp.net自定义控件代码学习笔记

    效果:在放这个控件的页面: XML/HTML 复制代码 代码如下: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="test6.aspx.cs" Inherits="test6" %> <%@Register TagPrefix="custom" Namespace="myComponents" %>

  • 关于asp.net 自定义分页控件

    这几天空学习了下自定义控件,参考了aspnetpager开发了自己的分页控件.相对aspnetpager来说功能是多,但个人感觉他的代码太多. 界面: 使用: <%@ Register assembly="YSM.AspNetPager" namespace="YSM.AspNetPager" tagprefix="cc1" %> 页面注册控件,也可以在web.config中配置 1.ajax之UpdatePanel分页则把控件放到U

随机推荐