zoukankan      html  css  js  c++  java
  • WebUserControl归纳

    看了好多人都写了用户控件方面的文章,俺自己也来一篇总结,这应该不算抄袭吧,嘿嘿!!

    新建一个用户控件:

    右击项目添加新项,弹出如下图所示界面,选择web用户控件;

    为用户控件添加属性:

        public string UserName
        {
            get
            {
                return txtUserName.Text;
            }
            set
            {
                txtUserName.Text = value;
            }
        }
    

    编译之后在客户端我们就可以访问到这个UserName属性,对其进行赋值取值操作,在客户端的用户控件属性一栏看到被公开的UserName属性:

    当然我们也可以不以公开属性的方式与外界交互,我们可以在客户端通过FindControl的方式直接操作用户控件内部的控件;

    为用户控件添加事件:

    这样可以在客户端方便操作:

    public partial class WebUserControl : System.Web.UI.UserControl
    {
        public  delegate  void  submithandler(object sender,EventArgs e);
        public  event submithandler MySubmitEvent;
        protected void Page_Load(object sender, EventArgs e)
        {
    
        }
        public string UserName
        {
            get
            {
                return txtUserName.Text;
            }
            set
            {
                txtUserName.Text = value;
            }
        }
        protected void Button1_Click(object sender, EventArgs e)
        {
            if (MySubmitEvent != null)
            {
                MySubmitEvent(this, e);
            }
        }
     
    }
    

    首先定义了一个委托(这里叫submithandler),他有两个参数(也可以不定义参数,参数可以用于传递数据),

    然后定义了一个委托变量的事件MySubmitEvent;

    最后在当前的事件中判断事件是否被订阅,如果有订阅者,则触发这个事件,这个被公开的事件的订阅是被放在客户端的,由客户端定义事件的回调函数(我觉得叫回调函数挺容易理解的,不知道这么叫对不对?);

    这样用户控件的两个与外界交互的重要方式就搞定了,在使用用户控件的时候还有一个地方需要注意,就是用户控件内部的控件的ID在客户端会解析为用户控件ID_子控件ID的形式,

    所以在用客户端脚本操作

    他们的时候需要用到一个重要的属性ClientID;

     

    <%@ Control Language="C#" AutoEventWireup="true" CodeFile="WebUserControl.ascx.cs" Inherits="WebUserControl" %>
    <asp:Literal ID="Literal1" runat="server">用户名:</asp:Literal><asp:TextBox ID="txtUserName" runat="server"></asp:TextBox><br />
    <asp:Literal ID="Literal2" runat="server">密码:</asp:Literal><asp:TextBox ID="txtPassWord" runat="server"></asp:TextBox><br />
    <asp:Button ID="Button1" runat="server" Text="获取用户名" onclick="Button1_Click" />
    <input id="Button2" type="button" value="input方式获取用户名"  onclick ="ShowName()" /> 
    <script type ="text/javascript" >
        function ShowName() {
            alert(document.getElementById("<%=txtUserName.ClientID%>").value);
        }
    </script>
    

    这里txtUserName为用户控件内部的一个子控件的ID,txtUserName.ClientID是获取用户控件在客户端解析之后的最终ID,而<%=txtUserName.ClientID%>得意思就是在asp.net页面执行这段服务器端代码

    当然对于ClientID的重要还表现在模板以及模板控件的使用上;

    执行之后就输出在这个位置供脚本代码使用;

    向客户页面添加用户控件:

    1.打开需要用到用户控件的页面的设计界面,直接将用户控件拖入指定的位置,这样的话VS会自动的把必要地引用自动帮助我们加上,在源码也拖是没有效果哦;

    2.就是手动的敲出那些引用;


    使用用户控件:

    上面我们已经为用户控件公开了属性和事件,现在我们就在客户端使用这些东西;

     

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    
    public partial class _Default : System.Web.UI.Page 
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            
                //WebUserControl1.UserName = "谢龙宝";
              TextBox  txt=WebUserControl1.FindControl("txtUserName")as TextBox;
              txt.Text = "谢龙宝";
            
              WebUserControl1.MySubmitEvent += new WebUserControl.submithandler(WebUserControl1_MySubmitEvent);
        }
    
        void WebUserControl1_MySubmitEvent(object sender, EventArgs e)
        {
       
            Response.Write(WebUserControl1.UserName);
        }
       
    }
    

    属性的使用时很简单的,像使用普通的属性一样取值呀赋值呀,通过FindControl的方式直接操作;

    至于事件的使用则也水到渠成,上面说了事件的订阅时放在客户端的,所以这里我们就在客户页面的加载时订阅事件(可以理解为给事件指定了一个处理函数(回调函数))

    参考博客

  • 相关阅读:
    Spring Boot中Bean对象的核心特性及依赖注入分析
    Spring Boot快速入门
    throw和throws
    Spring框架中的一些常见注释
    关于maven的介绍并创建一个简单的maven工程
    luffyapi~settings
    爬虫~requests
    爬虫~scrapy1
    爬虫~scrapy
    爬虫~选择器
  • 原文地址:https://www.cnblogs.com/LittleFeiHu/p/1947559.html
Copyright © 2011-2022 走看看