问题来自网上:
动态添加控件,应该加在OnInit(EventArgs e)事件里。
protected override void OnInit(EventArgs e) { // 加在这个事件内 }
下面Insus.NET就以动态添加一个TextBox在用户控件内,在控件值发生变化时,触发事件,并提示变化后的值。
<% @ Control Language = " C# " AutoEventWireup = " true " CodeFile = " InsusUserControl.ascx.cs " Inherits = " InsusUserControl " %> < asp:PlaceHolder ID ="PlaceHolder1" runat ="server" ></ asp:PlaceHolder >
InsusUserControl.ascx.cs
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using Insus.NET; public partial class InsusUserControl : System.Web.UI.UserControl { protected override void OnInit(EventArgs e) { TextBox tb = new TextBox(); tb.ID = " TextBox1 "; tb.AutoPostBack = true; tb.TextChanged +=tb_TextChanged; this.PlaceHolder1.Controls.Add(tb); base.OnInit(e); } protected void Page_Load( object sender, EventArgs e) { } protected void tb_TextChanged( object sender, EventArgs e) { var tb = (TextBox)sender; if ( string.IsNullOrEmpty(tb.Text.Trim ())) return; string s = " 当前TextBox控件值为: " + tb.Text.Trim(); InsusJavascriptUtility objJs = new InsusJavascriptUtility (); objJs.JsAlert (s); // Response.Write ("<scr" + "ipt> alert('" + s +"') </scr" + "ipt>"); } }
把用户控件拉入aspx页面中,并运行: