控件與使用者互動的主要管道是屬性與事件。本文示範簡單型別屬性(string、int 等)的標準實作模式、虛擬屬性支援繼承覆寫、屬性在 Render 階段的應用。
public class PicShow : Control
{
private string _imgUrl;
public virtual string ImgUrl
{
get => _imgUrl;
set => _imgUrl = value ?? string.Empty;
}
protected override void Render(HtmlTextWriter writer)
{
writer.AddStyleAttribute(HtmlTextWriterStyle.TextAlign, "center");
writer.AddStyleAttribute(HtmlTextWriterStyle.Width, "100px");
writer.AddStyleAttribute(HtmlTextWriterStyle.Height, "100px");
writer.RenderBeginTag(HtmlTextWriterTag.Div);
writer.AddAttribute(HtmlTextWriterAttribute.Src, ImgUrl);
writer.AddStyleAttribute(HtmlTextWriterStyle.Width, "80px");
writer.AddStyleAttribute(HtmlTextWriterStyle.Height, "80px");
writer.RenderBeginTag(HtmlTextWriterTag.Img);
writer.RenderEndTag(); // Img
writer.RenderEndTag(); // Div
}
}
value ?? string.Empty 避免 Render 時 NullReferenceHtmlTextWriterStyle、HtmlTextWriterAttribute、HtmlTextWriterTag 列舉,避免魔術字串<%@ Register TagPrefix="cc" Namespace="MyControls" Assembly="MyControls" %>
<cc:PicShow ID="PicShow1" runat="server" ImgUrl="~/Images/photo.jpg" />
| 分類 | 範例 | 標記 |
|---|---|---|
| 外觀 | BackColor, ForeColor, Font, CssClass | 繼承自 WebControl |
| 行為 | Enabled, Visible, ReadOnly | 繼承自 WebControl |
| 資料 | DataSource, DataTextField, SelectedValue | 自訂 |
| 業務 | ImgUrl, MaxLength, AllowMultiple | 自訂,加 virtual |