用户控件 WebUserControl .ascx

用户控件:WebUserControl   添加新项-用户控件 .ascx后缀,
            派生.UserControl与页面的父类不是一个  是要嵌在页面里面使用
使用方法:直接设计页面拖到要放置的位置,出现以下两项

<%@ Register src="WUC.ascx" tagname="WUC" tagprefix="uc1" %>

<uc1:WUC ID="WUC1" runat="server" />

路径 4个  
    1:控件路径,image,超链接,指向页面

    第一步:在WUC.ascx页面上:
    <img  src="Image/暴风截图2015102133868160.jpg" runat="server"id="id1"/><%--变成服务器控件--%>

        在控件里加两项内容;runat="server" id="id1";将控件变成变成服务器控件,用户控件下这两项内容缺一不可,
        防止不是在同一级文件夹下找不到文件,服务器自动转换路径
        

    2:样式表中用户控件路径 利用外部样式表,不要写内联的样式表
第一步:添加新项-样式表
    将用的页面添加到head里面

     样式表页面CSS.css
      #aa {
    background-image:url(../Image/暴风截图2015102133868160.jpg) ;//  ../
        height:100px;
        width:100px

}
第二步:在WUC.ascx页面上:

    < div id="aa" ></div>

    

    3:外部资源路径 外部的js文件  ,需要调用函数来处理路径

第一步;添加新项-JavaScript文件
       JavaScript.js页面:
       alert("你好");

第二步:   WUC.ascx.cs:写函数

        public string ShowPath()
    {

        string path = "Script/JavaScript.js";
        path = ResolveClientUrl(path);//获取客户端浏览器可以使用的路径url
        return path;
    }
   
第三步:  WUC.ascx页面上:直接拖过控件

       <script src="<%=ShowPath()%>"></script>


    4:页面路径:用户控件按钮点击跳转页面
        用户控件按钮点击时跳转页面:将相对路径转换为绝对路径
                       ~ 在服务器上表示网站的根目录
        protected void Button1_Click(object sender, EventArgs e)
        {
          Response.Redirect("~/main.aspx");
        }



二:传值
   AAAA1:页面向用户控件传值
      a;findcontrol 传值
          
          .aspx按钮中
          //1.取页面控件按钮的值
        string s = TextBox1.Text;
        //2去用户控件找文本框
        TextBox text = WUC1.FindControl("TextBox1") as TextBox;
        //3.将页面文本值赋值给用户控件的文本框
        text.Text = s;

      b:属性传值
第一步:用户控件里面写一个属性;
       public string Txt
    {
        get
        {
            return TextBox1.Text;
        }

        set
        {
            TextBox1.Text=value;
        }
    }

第二步:在页面按钮里写
     protected void Button1_Click(object sender, EventArgs e)
    {
       
        //WUC1.Txt = TextBox1.Text;//用页面上取值给用户控件
        TextBox1.Text = WUC1.Txt;//从用户控件里面取给页面


    }

第三步:页面控件按钮点击时:
     protected void Button1_Click(object sender, EventArgs e)
    {
       // 找到用户控件的属性
        WUC1.Txt = TextBox1.Text;
    }




BBBB2:用户控件向页面传值:
      a:用session传值:
第一步:在用户控件:
             protected void Button1_Click(object sender, EventArgs e)
        {
        
        Session["txt"] = TextBox1.Text;
         }
    


第二步:在页面上重写onloadcomplete()事件:在子类中对父类的方法的重写,
       防止数据延迟 override onloadcomplete()
        // 在页面加载完成后对页面家安在完成后对父类方法的重写
         protected override void OnLoadComplete(EventArgs e)
         {
             base.OnLoadComplete(e);

             if (Session["txt"] != null)
            {
            TextBox1.Text = Session["txt"].ToString();
            }
         }





建议用  b:委托或代理;指向方法的引用,引用指向方法,,好用但是难理解;只改变指向的方法即可 delegete

            Dog d=New Dog();d引用指向的是Dog类的对象
            string s="ssss";s指向的是字符串
            public void Show(Dog);引用指向方法,指向方法的引用

            1:定义一个类
            class Dog
            {


            public int Dog;
            public void walk();

            }
            2:声明一个dog对象
            Dog d;
            3:将该引用指向Dog
            
             d=New Dog();

            4:用该引用调对象的方法


     代理:指向方法的引用 和事件很像
    
         签名:返回类型  void,参数列表string s;

y        1:定义一个代理 //用户控件里面
             //加上delegate后,ShowDelegate不是原来的函数名而是代理类型名

             public delegate void ShowDelegate(string s);
        
        2:声明一个代理的引用 //用户控件里面

        // 前面加上public后在其他类里面可以用
             public ShowDelegate show;

        
        3:在具体页面上页面加载时3;将代理的引用指向签名匹配的(函数)方法; 可以和手动挂事件一样 ,
           += 可以挂很多事件,事件本质就是一个特殊的代理。可以指向很多方法只要签名一致就可以,
        
        show=new ShowDelegate(DO);

         protected void Page_Load(object sender, EventArgs e)
    {
        //3.将该引用指向签名匹配的函数(方法)
        //WUC1.Show = new WUC.ShowDelegate(ShowText);

        WUC1.Show += ShowText;
        
    }
        
        4:用代理调用方法 在用户控件button里面

         show("aa");

         protected void Button1_Click(object sender, EventArgs e)
    {
      

        //.调用Show方法
        string s = TextBox1.Text;
        Show(s);

    }

         5:在实际页面写函数。签名必须和代理类型的一样
        public void Do(string s)
        {

        TextBox1.Text=A;
        }
posted @ 2016-01-25 15:39  小热包1  阅读(2946)  评论(0编辑  收藏  举报