【IT168技术文档】
摘要
前面的文章中,我们编写了一个非常简单的WebPart,它只能输出一个Hello World!的字符串。
很显然,这种WebPart根本就没有什么实际的作用。有没有办法编写比较复杂一些的,比如是带事件的WebPart呢?
本篇文章将介绍如何编写一个带事件的WebPart。
正文
要实现带事件的WebPart,实际上就是要实现有复合控件的WebPart,这在开发过程中具有非常大的实际意义。如果我们能够做到这点,那么,其它的什么样的WebPart,相信大家都能举一反三的做到。
这里,我就用一个TextBox,一个Button控件来举例子,要做到的就是单击Button,能将当前系统时间显示在TextBox中。
至于WebPart的基本操作,前面的文章中讲得很清楚,这里不再一一讲解操作步骤。
为了方便您的学习,您可以下载本篇文章所创建的工程。单击此处下载。
下面将记录每一步的操作过程。
1、首先创建一个命名空间为Eallies.WebParts.Sample的C#的Class Library工程,并将默认的Class1.cs改名为Time.cs。
然后添加System.Web引用,并将AssemblyInfo.cs按照前面文章中的做法更改好。
将Time.cs的代码更改为如下代码:
1 using System; 2 using System.Collections.Generic; 3 using System.Text; 4 5 using System.Web.UI; 6 using System.Web.UI.WebControls; 7 using System.Web.UI.WebControls.WebParts; 8 using System.Web.UI.HtmlControls; 9 10 namespace Eallies.WebParts.Sample 11 { 12 public class Time : WebPart, INamingContainer 13 { 14 private string _Text; 15 16 private HtmlTableCell _HtmlTableCell = new HtmlTableCell(); 17 18 private TextBox _TextBox = new TextBox(); 19 private Button _Button = new Button(); 20 21 public Time() 22 { 23 this._Button.Click += delegate(object sender, EventArgs e) 24 { 25 this._Text = DateTime.Now.ToString(); 26 27 this._HtmlTableCell.InnerHtml = ""; 28 this.AddControls(); 29 }; 30 } 31 32 [WebBrowsable(true), Personalizable(true)] 33 public string Text 34 { 35 get { return _Text; } 36 set { _Text = value; } 37 } 38 39 protected override void CreateChildControls() 40 { 41 this.Controls.Add(new LiteralControl("<table>" + "\n")); 42 this.Controls.Add(new LiteralControl(" <tr>" + "\n")); 43 this.Controls.Add(this._HtmlTableCell); 44 this.Controls.Add(new LiteralControl(" </tr>" + "\n")); 45 this.Controls.Add(new LiteralControl("</table>" + "\n")); 46 47 if (this.Page.IsPostBack == false) this.AddControls(); 48 } 49 50 protected override void OnLoad(EventArgs e) 51 { 52 base.OnLoad(e); 53 54 if (this.Page.IsPostBack == true) this.AddControls(); 55 } 56 57 protected override void Render(HtmlTextWriter writer) 58 { 59 base.Render(writer); 60 } 61 62 private void AddControls() 63 { 64 this._TextBox.ID = this.ID + "TextBox"; 65 this._TextBox.Text = this._Text; 66 this._HtmlTableCell.Controls.Add(this._TextBox); 67 68 this._HtmlTableCell.Controls.Add(new LiteralControl("<br>")); 69 70 this._Button.ID = this.ID + "Button"; 71 this._Button.Text = "Get Time"; 72 this._HtmlTableCell.Controls.Add(this._Button); 73 } 74 } 75 }