|
Render() 方法基本上控制着 WebControl 的整个输出。所以可以自己重写Rendr()方法来实现控件的输出
我以前写过一个广告控件,你可以参考一下,原理差不多的
http://www.cnblogs.com/devngm/archive/2007/06/18/787226.html
包含了两个或以上控件可以继承自CompositeControl,具体可以看一下 msdn 的例子 前台调用: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <%@ Register Assembly="MulTest.Core" Namespace="MulTest.Core" TagPrefix="Test" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>Untitled Page</title> </head> <body> <form id="form1" runat="server"> <Test:MyCompositeControl ID="test" runat="server" /> <asp:Button runat="server" ID="ctr" Text="提交内容" /> </form> </body> </html> 后台: using System; using System.Collections.Generic; using System.Text; using System.Web.UI.WebControls; namespace MulTest.Core { public class MyCompositeControl : System.Web.UI.Control { private TextBox tbUserName = new TextBox(); private RequiredFieldValidator validatorForUserName = new RequiredFieldValidator(); protected override void CreateChildControls() { base.CreateChildControls(); //tbUserName.ID = "testusertname";//我这里写死了, 可以公开一个属性,用属性来指定它的ID或者根据当控件的ID来生成. tbUserName.ID = this.ID + "_username"; //validatorForUserName.ID = "testvalidator"; validatorForUserName.ID = this.ID + "_usernamevalidator"; validatorForUserName.ControlToValidate = this.tbUserName.ID; validatorForUserName.ErrorMessage = "**"; this.Controls.Add(tbUserName); this.Controls.Add(validatorForUserName); } } } 在VS2005下测试通过. |