当前位置: 代码迷 >> .NET组件控件 >> 用户控件怎么对外开放事件借口?
  详细解决方案

用户控件怎么对外开放事件借口?

热度:946   发布时间:2013-02-25 00:00:00.0
用户控件如何对外开放事件借口???
今天下了“微软一站式示例代码库”的例子,里面讲到了一个关于“事件”的例子代码,自己模仿着写了一个,代码如下:
Login.ascx

C# code
using System;namespace EventDemo{        public partial class Login : System.Web.UI.UserControl    {        public event EventHandler OnDengLu;        protected void Page_Load(object sender, EventArgs e)        {        }        //public string LblUserName         //{        //    get         //    {        //        return this.lblUserName.Text;        //    }        //    set         //    {        //        this.lblUserName.Text = value;        //    }        //}        //public string TxtUserName        //{        //    get         //    {        //        return this.txtUserName.Text;        //    }        //    set         //    {        //        this.txtUserName.Text = value;        //    }        //}        //public string LblPwd         //{        //    get         //    {        //        return this.lblPwd.Text;        //    }        //    set         //    {        //        this.lblPwd.Text = value;        //    }        //}        //public string TxtPwd         //{        //    get         //    {        //        return this.txtUserName.Text;        //    }        //    set         //    {        //        this.txtUserName.Text = value;        //    }        //}        //public string BtnLogin         //{        //    get         //    {        //        return this.btnLogin.Text;        //    }        //    set         //    {        //        this.btnLogin.Text = value;        //    }        //}                protected void btnLogin_Click(object sender, EventArgs e)        {            if (OnDengLu != null)                this.OnDengLu(sender, e);                    }    }}


default.aspx引用用户控件代码如下:
VB.NET code
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="EventDemo._Default" %><%@ Register src="Login.ascx" tagname="Login" tagprefix="uc1" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" ><head runat="server">    <title>无标题页</title></head><body>    <form id="form1" runat="server">    <div>                <uc1:Login ID="Login1" runat="server" /><!--引用用户控件-->            </div>    </form></body></html>


后台代码:
C# code
using System;namespace EventDemo{    public partial class _Default : System.Web.UI.Page    {        protected void Page_Load(object sender, EventArgs e)        {            Login log = LoadControl("Login.ascx") as Login;            if (log != null)            {                log.OnDengLu += new EventHandler(log_OnDengLu);                            }        }        public void log_OnDengLu(object sender, EventArgs e)         {            Response.Write("login");        }    }}


但是执行结果没有(没有打印login),后来找了很久,才发现微软调用用户控件代码例子里面用到了一个PlaceHolder控件。
我按照微软的实例代码,依次对引用用户控件的default.aspx页面的前、后台添加代码
前台:<asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
后台:this.PlaceHolder1.Controls.Add(myUserControl);
出现了结果(打印出了login)。

此时有发现一个问题,页面上出现了两个login控件,一个是我“拖”进去的,一个是this.PlaceHolder1.Controls.Add(myUserControl);代码动态添加的。。。