今天下了“微软一站式示例代码库”的例子,里面讲到了一个关于“事件”的例子代码,自己模仿着写了一个,代码如下:
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);代码动态添加的。。。