編寫自訂控制項首先要選擇基類:
1.所有的標準控制項都可以做為基類。你可以選擇你需要的標準控制項來重寫新的控制項。
2.如果從標準控制項找不到適合的基類,則可以使用以下三種中的一種
a)System.Web.UI.Control(所有ASP.NET控制項的基類)
b)System.Web.UI.WebControls.WebControl(繼承自a)
c)System.Web.UI.WebControls.CompositeControl(繼承自b)
一:Control的呈現方法
Control是通過重寫它的Render()方法來實現呈現的。
Render方法的聲明:
Code
protected internal vitrual void Render(HtmlTextWrite output)
{
//todo
}
protected和virtual二個Attribute得存在,所以繼承於Control的類可以重寫Render方法來實現自己的呈現邏輯。
internal這個Attribute使得該方法只能在ASP.NET架構中直接調用,而不能在其他代碼中直接調用。
Code
using System;
using System.Collections.Generic;
using System.Text;
using System.Web.UI;
namespace ikeControl
{
public class LoginTex:Control
{
protected override void Render(HtmlTextWriter writer)
{
//開始最外層的Div
writer.RenderBeginTag(HtmlTextWriterTag.Div);
//添加文字
writer.WriteLine("使用者名稱 ");
//添加使用者名稱登入框樣式和屬性
writer.AddAttribute(HtmlTextWriterAttribute.Type, "text");
writer.AddStyleAttribute(HtmlTextWriterStyle.Width, "100px");
writer.AddStyleAttribute(HtmlTextWriterStyle.FontSize, "12px");
writer.AddStyleAttribute(HtmlTextWriterStyle.Color, "0000FF");
writer.AddStyleAttribute(HtmlTextWriterStyle.TextDecoration, "blink");
//開始使用者名稱登入框
writer.RenderBeginTag(HtmlTextWriterTag.Input);
//添加分行符號號
writer.RenderBeginTag(HtmlTextWriterTag.Br);
//結束分行符號號
writer.RenderEndTag();
//添加密碼文字
writer.WriteLine("密 碼 ");
//結束使用者名稱登入框
writer.RenderEndTag();
//添加密碼登入框樣式和屬性
writer.AddAttribute(HtmlTextWriterAttribute.Type, "password");
writer.AddStyleAttribute(HtmlTextWriterStyle.FontSize, "12px");
writer.AddStyleAttribute(HtmlTextWriterStyle.BackgroundColor, "#FF00FF");
//開始密碼登入框
writer.RenderBeginTag(HtmlTextWriterTag.Input);
//結束密碼登入框
writer.RenderEndTag();
//結束最外層Div
writer.RenderEndTag();
}
}
}
1.當我們把他添加到頁面的時候,IDE會自動添加這樣一句代碼
Code
<%@ Register Assembly="ikeControl" Namespace="ikeControl" TagPrefix="ike" %>
TagPrefix屬性是聲明控制項首碼,IDE預設是ccl,當然我們可以自己來定義為自己喜歡的。(最好不要改成asp,免得和標準控制項混淆)
自訂TagPreFix有3種方法:
1)在ASPX頁面中修改,這樣只會影響當前頁面的。而不能修改整個項目。
2)修改整個項目的,需要在web.config檔案中修改,在System.web下加上下面一段代碼
Code
<pages>
<controls>
<add assembly="ikeControl" namespace="ikeControl" tagPrefix="ike"/>
</controls>
</pages>
3)編譯dll前在properties檔案中AssemblyInfo.cs加
Code
using System.Web.UI;
using System.ComponentModel;
[assembly: TagPrefix("LoginText", "ike")]
Tagprefix("命名空間","控制項首碼")