//这是我的自定义控件的代码,
using System;
using System.Collections.Generic;
using System.Text;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace Controls{
// <summary>
// 容器枚举
// </summary>
public enum ContainerType{
PaymentMethodLabel=1,
PaymentMethod=2,
CreditCardNoLabel=3,
CreditCardNo=4,
CardholderNameLabel=5,
CardholderName=6,
ExpirationDateLabel=7,
ExpirationDate=8,
SubmitButton=9
}
// <summary>
// 自定义控件容器
// </summary>
public class CreditCardFormContainer:TableCell,INamingContainer
{
private ContainerType containerType;
private string labelText;
public CreditCardFormContainer(ContainerType containerType){
this.containerType=containerType;
}
public ContainerType ContainerType
{
get { return containerType; }
}
public string LabelText
{
get { return labelText; }
set { labelText = value; }
}
}
// <summary>
// 自定义控件
// </summary>
//[ParseChildren(true)]
[System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name = "FullTrust"]
public class TemplatedCreditCardForm:System.Web.UI.WebControls.WebControl,INamingContainer,IParserAccessor
{
private CreditCardFormContainer paymentMethodLabelContainer;
private CreditCardFormContainer creditCardNolabelContainer;
private CreditCardFormContainer cardholderNameLabelContainer;
private CreditCardFormContainer expirationDateLabelContianer;
private CreditCardFormContainer paymentMethodContainer;
private CreditCardFormContainer creditCardNoContainer;
private CreditCardFormContainer cardholderNameContainer;
private CreditCardFormContainer expirationDateContianer;
private CreditCardFormContainer submitButtonContainer;
#region //摸板字段与属性
private ITemplate paymentMethodLabelTemplate;
[PersistenceMode(PersistenceMode.InnerProperty),TemplateContainer(typeof(CreditCardFormContainer))]
public ITemplate PaymentMethodLabelTemplate
{
get { return paymentMethodLabelTemplate; }
set { paymentMethodLabelTemplate = value; }
}
private ITemplate paymentMethodTemplate;
[PersistenceMode(PersistenceMode.InnerProperty)]
public ITemplate PaymentMethodTemplate
{
get { return paymentMethodTemplate; }
set { paymentMethodTemplate = value; }
}
private ITemplate creditCardNoLabelTemplate;
[PersistenceMode(PersistenceMode.InnerProperty), TemplateContainer(typeof(CreditCardFormContainer))]
public ITemplate CreditCardNoLabelTemplate
{
get { return creditCardNoLabelTemplate; }
set { creditCardNoLabelTemplate = value; }
}
private ITemplate creditCardNoTemplate;
[PersistenceMode(PersistenceMode.InnerProperty)]
public ITemplate CreditCardNoTemplate
{
get { return creditCardNoTemplate; }
set { creditCardNoTemplate = value; }
}
private ITemplate cardholderNameLabelTemplate;
[PersistenceMode(PersistenceMode.InnerProperty), TemplateContainer(typeof(CreditCardFormContainer))]
public ITemplate CardholderNameLabelTemplate
{
get { return cardholderNameLabelTemplate; }
set { cardholderNameLabelTemplate = value; }
}
private ITemplate cardholderNameTemplate;
[PersistenceMode(PersistenceMode.InnerProperty)]
public ITemplate CardholderNameTemplate
{
get { return cardholderNameTemplate; }
set { cardholderNameTemplate = value; }
}
private ITemplate expirationDateLabelTemplate;
[PersistenceMode(PersistenceMode.InnerProperty), TemplateContainer(typeof(CreditCardFormContainer))]
public ITemplate ExpirationDateLabelTemplate
{
get { return expirationDateLabelTemplate; }
set { expirationDateLabelTemplate = value; }
}
private ITemplate expirationDateTemplate;
[PersistenceMode(PersistenceMode.InnerProperty)]
public ITemplate ExpirationDateTemplate
{
get { return expirationDateTemplate; }
set { expirationDateTemplate = value; }
}
private ITemplate submitButtonTemplate;
[PersistenceMode(PersistenceMode.InnerProperty), TemplateContainer(typeof(CreditCardFormContainer))]
public ITemplate SubmitButtonTemplate
{
get { return submitButtonTemplate; }
set { submitButtonTemplate = value; }
}
#endregion
#region //ViewState 属性
public virtual string PaymentMethodLabelText
{
get { return ViewState["PaymentMethodLabelText"] != null ? (string)ViewState["PaymentMethodLabelText"] : string.Empty; }
set { ViewState["PaymentMethodLabelText"] = value; }
}
public virtual string CreditCardNoLabelText
{
get { return ViewState["CreditCardNoLabelText"] != null ? (string)ViewState["CreditCardNoLabelText"] : string.Empty; }
set {
ViewState["CreditCardNoLabelText"] = value; }
}
public virtual string CardholderNameLabelText
{
get { return ViewState["CardholderNameLabelText"] != null ? (string)ViewState["CardholderNameLabelText"] : string.Empty; }
set { ViewState["CardholderNameLabelText"] = value; }
}
public virtual string ExpirationDateLabelText
{
get { return ViewState["ExpirationDateLabelText"] != null ? (string)ViewState["ExpirationDateLabelText"] : string.Empty; }
set { ViewState["ExpirationDateLabelText"] = value; }
}
public virtual string SubmitButtonText
{
get { return ViewState["SubmitButtonText"] != null ? (string)ViewState["SubmitButtonText"] : string.Empty; }
set { ViewState["SubmitButtonText"] = value; }
}
#endregion
//根据容器类型创建容器控件
protected virtual CreditCardFormContainer CreateContainer(ContainerType containerType)
{
return new CreditCardFormContainer(containerType);
}
//创建容器子控件,容器只与他自己的子控件关联,与整个自定义控件没有关系
protected virtual void CreateContainerChildControls(CreditCardFormContainer container)
{
switch (container.ContainerType){
case ContainerType.PaymentMethodLabel:
container.LabelText = PaymentMethodLabelText;
if (PaymentMethodLabelTemplate != null){
PaymentMethodLabelTemplate.InstantiateIn(container);
}
break;
case ContainerType.CreditCardNoLabel:
container.LabelText = CreditCardNoLabelText;
if (CreditCardNoLabelTemplate != null){
CreditCardNoLabelTemplate.InstantiateIn(container);
}
break;
case ContainerType.CardholderNameLabel:
container.LabelText = CardholderNameLabelText;
if (CardholderNameLabelTemplate != null){
CardholderNameLabelTemplate.InstantiateIn(container);
}
break;
case ContainerType.ExpirationDateLabel:
container.LabelText = ExpirationDateLabelText;
if (ExpirationDateLabelTemplate != null){
ExpirationDateLabelTemplate.InstantiateIn(container);
}
break;
case ContainerType.SubmitButton:
container.LabelText = SubmitButtonText;
if (SubmitButtonTemplate != null){
SubmitButtonTemplate.InstantiateIn(container);
}
break;
case ContainerType.PaymentMethod:
if (PaymentMethodTemplate != null){
PaymentMethodTemplate.InstantiateIn(container);
}
break;
case ContainerType.CreditCardNo:
if (CreditCardNoTemplate != null){
CreditCardNoTemplate.InstantiateIn(container);
}
break;
case ContainerType.CardholderName:
if (CardholderNameTemplate != null){
CardholderNameTemplate.InstantiateIn(container);
}
break;
case ContainerType.ExpirationDate:
if (ExpirationDateTemplate != null){
ExpirationDateTemplate.InstantiateIn(container);
}
break;
}
}
private void ApplyContainerStyle(CreditCardFormContainer container){
container.VerticalAlign = VerticalAlign.Middle;
container.Wrap = true;
container.BackColor = System.Drawing.Color.White;
container.ForeColor = System.Drawing.Color.Black;
container.Font.Bold = true;
if (container.ContainerType == ContainerType.SubmitButton){
container.HorizontalAlign = HorizontalAlign.Center;
container.ColumnSpan = 2;
}else
container.HorizontalAlign = HorizontalAlign.Left;
}
protected virtual void ApplyContainerStyles(){
ApplyContainerStyle(paymentMethodContainer);
ApplyContainerStyle(creditCardNolabelContainer);
ApplyContainerStyle(creditCardNoContainer);
ApplyContainerStyle(cardholderNameLabelContainer);
ApplyContainerStyle(cardholderNameContainer);
ApplyContainerStyle(expirationDateLabelContianer);
ApplyContainerStyle(expirationDateContianer);
ApplyContainerStyle(submitButtonContainer);
}
protected virtual void AddContainer(CreditCardFormContainer container){
Controls.Add(container);
}
protected virtual void RenderContainer(CreditCardFormContainer container,HtmlTextWriter writer){
container.RenderControl(writer);
}
protected override void OnDataBinding(EventArgs e){
EnsureChildControls();
//ChildControlsCreated = true;
base.OnDataBinding(e);
}
protected override void CreateChildControls(){
Controls.Clear();
paymentMethodLabelContainer = CreateContainer(ContainerType.PaymentMethodLabel);
CreateContainerChildControls(paymentMethodLabelContainer);
AddContainer(paymentMethodLabelContainer);
paymentMethodContainer = CreateContainer(ContainerType.PaymentMethod);
CreateContainerChildControls(paymentMethodContainer);
AddContainer(paymentMethodContainer);
creditCardNoContainer = CreateContainer(ContainerType.CreditCardNo);
CreateContainerChildControls(creditCardNoContainer);
AddContainer(creditCardNoContainer);
creditCardNolabelContainer = CreateContainer(ContainerType.CreditCardNoLabel);
CreateContainerChildControls(creditCardNolabelContainer);
AddContainer(creditCardNolabelContainer);
cardholderNameLabelContainer = CreateContainer(ContainerType.CardholderNameLabel);
CreateContainerChildControls(cardholderNameLabelContainer);
AddContainer(cardholderNameLabelContainer);
cardholderNameContainer = CreateContainer(ContainerType.CardholderName);
CreateContainerChildControls(cardholderNameContainer);
AddContainer(cardholderNameContainer);
expirationDateLabelContianer = CreateContainer(ContainerType.ExpirationDateLabel);
CreateContainerChildControls(expirationDateLabelContianer);
AddContainer(expirationDateLabelContianer);
expirationDateContianer = CreateContainer(ContainerType.ExpirationDate);
CreateContainerChildControls(expirationDateContianer);
AddContainer(expirationDateContianer);
submitButtonContainer = CreateContainer(ContainerType.SubmitButton);
CreateContainerChildControls(submitButtonContainer);
AddContainer(submitButtonContainer);
}
protected override HtmlTextWriterTag TagKey
{
get
{
return HtmlTextWriterTag.Table;
}
}
protected override void RenderContents(HtmlTextWriter writer){
ApplyContainerStyles();
writer.RenderBeginTag(HtmlTextWriterTag.Tr);
RenderContainer(paymentMethodLabelContainer, writer);
RenderContainer(paymentMethodContainer, writer);
writer.RenderEndTag();
writer.RenderBeginTag(HtmlTextWriterTag.Tr);
RenderContainer(creditCardNolabelContainer, writer);
RenderContainer(creditCardNoContainer, writer);
writer.RenderEndTag();
writer.RenderBeginTag(HtmlTextWriterTag.Tr);
RenderContainer(cardholderNameLabelContainer, writer);
RenderContainer(cardholderNameContainer, writer);
writer.RenderEndTag();
writer.RenderBeginTag(HtmlTextWriterTag.Tr);
RenderContainer(expirationDateLabelContianer, writer);
RenderContainer(expirationDateContianer, writer);
writer.RenderEndTag();
writer.RenderBeginTag(HtmlTextWriterTag.Tr);
RenderContainer(submitButtonContainer, writer);
writer.RenderEndTag();
}
}
}
//以下是template.aspx的页面代码
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="template.aspx.cs" Inherits="template" %>
<!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>template</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<TX:TemplatedCreditCardForm runat="server" ID="TCC" PaymentMethodLabelText="Payment Method:"
CreditCardNoLabelText="Credit Card NO.:" CardholderNameLabelText="Cardholder's Name:"
ExpirationDateLabelText="Expiration Date:" SubmitButtonText="提交">
<PaymentMethodLabelTemplate>
<asp:Label ID="lblPM" runat="server" Text='<%#DataBinder.Eval(Container,"LabelText" %>'/>
</PaymentMethodLabelTemplate>
<PaymentMethodTemplate>
<aspropDownList ID="DropDownList1" runat="server">
<asp:ListItem Text="Visa" Value="1"/>
<asp:ListItem Text="Master" Value="2" />
</aspropDownList>
</PaymentMethodTemplate>
<CreditCardNoLabelTemplate>
<asp:Label ID="lblCCN" runat="server" Text='<%#DataBinder.Eval(Container,"LabelText" %>'/>
</CreditCardNoLabelTemplate>
<CreditCardNoTemplate>
<asp:TextBox ID="txtCCN" runat="server"/>
</CreditCardNoTemplate>
<CardholderNameLabelTemplate>
<asp:Label ID="lblCN" runat="server" Text='<%#DataBinder.Eval(Container,"LabelText" %>'/>
</CardholderNameLabelTemplate>
<CardholderNameTemplate>
<asp:TextBox ID="txtCN" runat="server"/>
</CardholderNameTemplate>
<ExpirationDateLabelTemplate>
<asp:Label ID="lblED" runat="server" Text='<%#DataBinder.Eval(Container,"LabelText"%>'/>
</ExpirationDateLabelTemplate>
<ExpirationDateTemplate>
<aspropDownList ID="ddlEDM" runat="server">
<asp:ListItem Text="01" Value="01"/>
<asp:ListItem Text="02" Value="02"/>
<asp:ListItem Text="03" Value="03"/>
<asp:ListItem Text="04" Value="04"/>
<asp:ListItem Text="05" Value="05"/>
<asp:ListItem Text="06" Value="06"/>
<asp:ListItem Text="07" Value="07"/>
<asp:ListItem Text="08" Value="08"/>
<asp:ListItem Text="09" Value="09"/>
<asp:ListItem Text="10" Value="10"/>
<asp:ListItem Text="11" Value="11"/>
<asp:ListItem Text="12" Value="12"/>
</aspropDownList>
</ExpirationDateTemplate>
<SubmitButtonTemplate>
<asp:Button ID="btnSB" runat="server" Text='<%#DataBinder.Eval(Container,"LabelText"%>'/>
</SubmitButtonTemplate>
</TX:TemplatedCreditCardForm>
</div>
</form>
</body>
</html>