採用演進式教學:從最簡單的 Control 繼承開始,逐步引入進階概念。首版控件直接在 Render 中字串拼接:
public class CreditCardForm1 : Control
{
protected override void Render(HtmlTextWriter writer)
{
writer.Write("<table style='width:287px;height:128px;border-width:0'>");
writer.Write("<tr><td>支付方式</td><td>");
writer.Write("<select name='paymentMethod' id='paymentMethod' style='width:100%'>");
writer.Write("<option value='0'>Master</option>");
writer.Write("<option value='1'>Visa</option>");
writer.Write("</select></td></tr>");
// ... 後續行同理
for (int month = 1; month < 13; month++)
{
writer.Write("<option value=" + month + ">" + month + "</option>");
}
}
}
這其實是 Template Method 模式 的體現:基類定義渲染骨架,子類實作具體內容。雖然簡單可行,但後續將揭示其維護與相容性隱憂,引導讀者邁向更專業的 WebControl 體系。