Web用户自定义控件

在新建项的时候,选择Web用户控件,可用来自定义自己的控件,做好后,直接拖到页面即可使用
自定义控件与WEB交互,需要在 自定义控件里面 写 属性,如:

    public string CityID
    {
        get { return this.DropDownList1.SelectedValue; }
        
        set{ this.DropDownList1.SelectedValue = value;} 
    }

在外面调用的时候如下即可:

Label1.Text = this.City1.CityID;

自定义样式(公开属性)

    public ConsoleColor Color { get; set; }
    public string Title { get; set; }

定义 样式属性

<h1><%=this.Title  %></h1>
<div style='background-color:<%=this.Color%>'>
    组装的一些控件
</div>

样式调用

 this.City1.Title = "标题";
 this.City1.Color = ConsoleColor.Blue;

 

Web用户控件 公开事件

由于控件是 封装过的,所以当用户控件激发事件时,最外层是得不到数据的,解决办法有3种:

注:用户控件需设置 AutoPostBack="True"

-------- 1.利用系统的 EventHandler 委托

<1>.在用户控件后台文件内新建一个属性

    public string CityID 
    {
        get { return DropDownList1.SelectedValue; }
        set { DropDownList1.SelectedValue = value; }
    }

<2>.新建一个 event 事件

public event EventHandler CitySelected = null;

<3>.当用户控件中的SelectedIndexChanged事件触发时,激活 CitySelected 事件

    protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (this.CitySelected != null)
        {
            this.CitySelected(this, null);
        }
    }

<4>.在页面的后台 新建一个方法,用来处理用户控件返回的信息

    public void showCity(object sender, EventArgs e)
    {
        this.Label1.Text = this.City1.CityID;
    }

<5>.在页面的用户控件中 注册事件

<uc1:City ID="City1" runat="server" OnCitySelected="showCity" />

 

利用自定义的 委托

 <1>.自定义一个委托

public delegate void CitySelectedEventHander(string CityID);

<2>.自定义一个事件

    public event CitySelectedEventHander CitySeleted = null;

<3>.当用户控件触发时,激活自定义事件

    protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (CitySeleted != null)
        {
            string CityID = this.DropDownList1.SelectedValue;
            this.CitySeleted(CityID);
        }
    }

<4>.在页面后台新建一个方法,用于处理用户控件的事件

    public void ShowCity(string id)
    {
        this.Label1.Text = id;
    }

<5>.在页面的用户控件中 注册事件

    <uc1:City2 ID="City21" runat="server" onCitySeleted="ShowCity" />

 

利用系统委托 泛型事件(推荐使用)

 <1>.定义一个类,继承EventArgs类,主要用于封装属性,以便日后扩展

    public class CityEventArgs:EventArgs
    {
       public string CityID { get; set; }
    }

<2>.定义一个 泛型事件,用自定义的类做 参数

    public event EventHandler<CityEventArgs> CitySeleted = null;

<3>.在页面后台新建一个方法,用于处理用户控件的事件

    public void ShowCity(object sender,CityEventArgs e)
    {
        this.Label2.Text = e.CityID;
    }

<4>.在页面的用户控件中 注册事件

    <uc1:City3 ID="City31" runat="server" OnCitySeleted="ShowCity" />

注:注册事件也可用如下方法:

    protected void Page_Load(object sender, EventArgs e)
    {
       this.City31.CitySeleted += new EventHandler<CityEventArgs>(City31_CitySeleted);
    }

    void City31_CitySeleted(object sender, CityEventArgs e)
    {
        this.Label2.Text = e.CityID;
    }

 

动态增加用户控件

 在上面的基础上,增加如下内容:

Control c = this.LoadControl("City3.ascx");
City3 uc = c as City3;
uc.CityID = "SH";
this.PlaceHolder1.Controls.Add(uc);

注:PlaceHolder1是容器,当前页面需要在头部注册信息

<%@ Register src="~/UC/City3.ascx" tagname="City3" tagprefix="uc1" %>

 

转载于:https://www.cnblogs.com/xgao/p/4174079.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值