Asp.net 用户控件

       使用用户控件的目的很简单,就是为了复用。我们渴望把经常在我们页面里出现的东西给封装起来,用起来很方便。从使用控件的角度来讲,我们最主要考虑的是主页面和用户控件之间如何来传递数据。在最初的使用中,我会把控件的所有方法和属性公开(public),这样在主页面中可以随意的修改和调用,不过这种方式显然是不好的,违背了面向对象设计的封装原则,虽然增加了使用的灵活性,但是也使页面和用户控件之间的关系变得复杂,增加了耦合性。

      最近看书,学习了一种“正规”的使用方法和原则。首先要理解,页面的Page_Load方法是先于控件的Page_Load方法调用的,所以控件的初始化控件不要放在Page_Load中。

     1、添加属性

         在用户控件类中,添加private属性,和public的getter和setter。这样便可以主页面的控件标签中使用或者在主页面后台用编程的方式访问。

    用户控件的属性除了可以使用基本类型之外,还可以使用自定义的类。

    2、添加事件

         有时候,当用户控件中的事件被触发之后,我们希望可以在主页面里获得用户控件中的某些数值,这就涉及到从用户控件中传值到主页面中。一般情况下可以这样做,在用户控件中定义事件,然后在主页面中订阅,通过这个来传递数值。

View Code
 1 LoginEventControl.ascx
2
3 <asp:Textbox id="txtusername" runat="server"/>
4 <asp:Textbox id="txtpassword" runat="server"/>
5 <asp:button runat="server" text="提交" onclick="Login_Click"/>
6
7 LoginEventControlArgs.cs
8
9 public class LoginEventControlArgs :EventArgs
10 {
11 private string username;
12 private string password;
13
14 public string UserName
15 {
16 //getter&setter
17 }
18 public string Password
19 {
20 //getter&setter
21 }
22 }
23
24 LoginEventControl.ascx.cs
25
26 //定义事件委托
27 public delegate void LoginEventControlHandler(
28 object sender,LoginEventControlArgs e);
29 public partial class LoginEventControl: UserControl
30 {
31 //定义事件
32 public event LoginEventControlHandler LoginEvent;
33 protected void Login_Click(object sender,EventArgs e)
34 {
35 if(LoginEvent != null)
36 {
37 LoginEventControlsAtrgs args=new ;
38 args.username = ;
39 args.password = ;
40 LoginEvent(this,args);
41 }
42 }
43 }
44
45 aspx中
46 用户控件标签中设置OnLoginEvent="loginevent"
47
48 cs中
49
50 要先侦听该事件
51 login = new logineventcontrol();
52 this.load+=new eventHandler(this.page_load);
53 this.login.loginevent +=new logineventcontrolhandler(loginevent);
54
55 之后在事件处理程序中就可以利用args来获取用户名和密码了。



        

posted @ 2011-11-30 16:03  明之道  阅读(472)  评论(0编辑  收藏  举报