用户控件如何对外开放事件借口???
今天下了“微软一站式示例代码库”的例子,里面讲到了一个关于“事件”的例子代码,自己模仿着写了一个,代码如下:
Login.ascx
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); } }}<%@ 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>
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"); } }}
问题是,如果我动态添加用户控件的话,那么我的控件自定义的属性就不能在属性面板里面找到了。。。
请问用户控件的事件调用接口该如何放出,以及该如何注册用户控件的事件。。
[解决办法]
不需要加HolderPlace,它只是一个相当于Panel的占位符
protected void Page_Load(object sender, EventArgs e) { Login log = LoadControl("Login.ascx") as Login; if (log != null) { //如果需要属性,可以在这里直接赋值 如log.xxx=""; log.OnDengLu += new EventHandler(log_OnDengLu); this.form1.Controls.Add(log);//注意这句话,是将自定义控件加到页面 } }