asp.net 自定义控件
发布网友
发布时间:2022-05-11 12:09
我来回答
共2个回答
热心网友
时间:2022-04-27 09:35
先贴源代码~一会再解释~
新建一个类库/服务器控件项目,添加TextBox.cs文件,复制以下代码~
TextBox.cs
using System.Collections.Specialized;
namespace MyControl
{
[DefaultProperty("Text")]
[ToolboxData("<{0}:TextBox runat=server></{0}:TextBox>")]
public class TextBox : WebControl,IPostBackDataHandler
{
#region //event
public event EventHandler TextChanged;
#endregion
#region //Properties
public string Text
{
get
{
String s = (String)ViewState["Text"];
return ((s == null) ? "" : s);
}
set
{
ViewState["Text"] = value;
}
}
#endregion
#region //Render Engine
protected override HtmlTextWriterTag TagKey
{
get
{
return HtmlTextWriterTag.Input;
}
}
protected override void AddAttributesToRender(HtmlTextWriter writer)
{
writer.AddAttribute(HtmlTextWriterAttribute.Type, "text");
writer.AddAttribute(HtmlTextWriterAttribute.Name, this.UniqueID);
writer.AddAttribute(HtmlTextWriterAttribute.Value, Text);
base.AddAttributesToRender(writer);
}
#endregion
#region //realize the interface IPostBackDataHandler
public bool LoadPostData(string postDataKey, NameValueCollection postCollection)
{
if (postCollection[postDataKey] != Text)
{
Text = postCollection[postDataKey];
return true;
}
return false;
}
public void RaisePostDataChangedEvent()
{
if (TextChanged != null)
TextChanged(this, EventArgs.Empty);
}
#endregion
}
}
测试自定义控件的步骤:
右键项目,选择【生成】
新建一个网站,新建/Bin目录,右键【添加引用】,导航到上一个新建的项目的.ddl文件。
default.aspx的源代码:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<%@ Register Assembly="MyControl" Namespace="MyControl" TagPrefix="lark" %>
<!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>
<lark:TextBox runat="server" ID="tbInput" OnTextChanged="tbInput_TextChanged"></lark:TextBox>
<asp:Button ID="btnSubmit" runat="server" Text="提交" />
<asp:Label ID="lblShowInput" runat="server" ></asp:Label>
</div>
</form>
</body>
</html>
default.aspx.cs
protected void tbInput_TextChanged(object sender,EventArgs e)
{
lblShowInput.Text = "您输入的是:" + tbInput.Text;
}
==============源代码部分(完)===================
下面随便解释下源代码哈~
1。自定义控件其实就是个类,该类继承自WebControl类,同时实现IPostBackDataHandler接口~
2。添加自定义属性Text,并将之存储在控件的ViewState集合中~
3。添加自定义事件TextChanged
4。编写控件的生成引擎:
重写TagKey属性为INPUT,以修改外围标记
重写AddAttributeToRender()方法,为外围标记<input/>添加type value name属性。
5。实现IPostBackDataHandler接口的两个方法:
LoadPostData():接收投递的表单值,用于更新Text属性值。若属性值变化,返回true,自动调用RaisePostDataChangedEvent()方法。
RaisePostDataChangedEvent()方法中激活TextChanged事件~
以上~
自定义控件是ASP.NET中比较难懂的概念了~但是一旦掌握了的话,对之前ASP.NET的许多知识点都会有质的飞跃哦~
热心网友
时间:2022-04-27 10:53
Textbox box=new Textbox(....);
box.size();
box.visiable=true;
....