第二章 继承WebControl的自定义控件
到现在为止,我已经写了三篇关于自定义控件开发的文章,很感谢大家的支持!不知道大家对我讲的方式有什么好的建议,我尽量使自定义控件的技术让更多的程序员同胞接受。好了,开发开始了!
本章还是延续上章的例子,开发一个CreditCardForm控件。
其实本章也不难,相信大家看完后,也觉得很简单!
我们首先开谈谈继承Control和WebControl的区别:其实二者最大的区别就是在,如果我们开发的控件继承WebControl,那么我们的控件就支持更多的CSS样式。而继承于Control的自定义控件的样式相对就少些。
其实还有一个区别就在开发的规范上。我们来简单的看看上一章的自定义控件的代码,主要来看看Render方法中的代码:大家只扫一眼就可以了。
1protectedoverridevoidRender(HtmlTextWriterwriter)
2 {
3 //显示table标记
4 writer.AddStyleAttribute(HtmlTextWriterStyle.Width,"287px");
5 writer.AddStyleAttribute(HtmlTextWriterStyle.Height,"128px");
6 writer.AddStyleAttribute(HtmlTextWriterStyle.BorderWidth,"0");
7 writer.AddAttribute(HtmlTextWriterAttribute.Id,"mytable");
8 writer.RenderBeginTag(HtmlTextWriterTag.Table);
9
10 //显示table类的标记包含tr,td还有一些textbox,下拉框等
11 writer.RenderBeginTag(HtmlTextWriterTag.Tr);
12
13 writer.RenderBeginTag(HtmlTextWriterTag.Td);
14 writer.Write(PaymentMethodText);
15 writer.RenderEndTag();
16
17 writer.RenderBeginTag(HtmlTextWriterTag.Td);
18 writer.AddAttribute(HtmlTextWriterAttribute.Name,"PaymentMethod");
19 writer.AddAttribute(HtmlTextWriterAttribute.Id,"PaymentMethod");
20 writer.AddStyleAttribute(HtmlTextWriterStyle.Width,"100%");
21 writer.RenderBeginTag(HtmlTextWriterTag.Select);
22
23 writer.AddAttribute(HtmlTextWriterAttribute.Value,"0");
24 writer.RenderBeginTag(HtmlTextWriterTag.Option);
25 writer.Write("Master");
26 writer.RenderEndTag();
27
28 writer.AddAttribute(HtmlTextWriterAttribute.Value,"1");
29 writer.RenderBeginTag(HtmlTextWriterTag.Option);
30 writer.Write("Visa");
31 writer.RenderEndTag();
32
33 writer.RenderEndTag();
34 writer.RenderEndTag();
35 writer.RenderEndTag();
36
37 writer.RenderBeginTag(HtmlTextWriterTag.Tr);
38 writer.RenderBeginTag(HtmlTextWriterTag.Td);
39 writer.Write(CreditCardNoText);
40 writer.RenderEndTag();
41
42 writer.RenderBeginTag(HtmlTextWriterTag.Td);
43 writer.AddAttribute(HtmlTextWriterAttribute.Type,"text");
44 writer.AddAttribute(HtmlTextWriterAttribute.Name,"CreditCardNo");
45 writer.AddAttribute(HtmlTextWriterAttribute.Id,"CreditCardNo");
46 writer.RenderBeginTag(HtmlTextWriterTag.Input);
47 writer.RenderEndTag();
48 writer.RenderEndTag();
49 writer.RenderEndTag();
50
51 writer.RenderBeginTag(HtmlTextWriterTag.Tr);
52 writer.RenderBeginTag(HtmlTextWriterTag.Td);
53 writer.Write(CardholderNameText);
54 writer.RenderEndTag();
55
56 writer.RenderBeginTag(HtmlTextWriterTag.Td);
57 writer.AddAttribute(HtmlTextWriterAttribute.Type,"text");
58 writer.AddAttribute(HtmlTextWriterAttribute.Name,"CardholderName");
59 writer.AddAttribute(HtmlTextWriterAttribute.Id,"CardholderName");
60 writer.RenderBeginTag(HtmlTextWriterTag.Input);
61 writer.RenderEndTag();
62 writer.RenderEndTag();
63 writer.RenderEndTag();
64
65 writer.RenderBeginTag(HtmlTextWriterTag.Tr);
66 writer.RenderBeginTag(HtmlTextWriterTag.Td);
67 writer.Write(ExpirationDateText);
68 writer.RenderEndTag();
69
70 writer.RenderBeginTag(HtmlTextWriterTag.Td);
71 writer.AddAttribute(HtmlTextWriterAttribute.Name,"Month");
72 writer.AddAttribute(HtmlTextWriterAttribute.Id,"Month");
73 writer.RenderBeginTag(HtmlTextWriterTag.Select);
74 for(intmonth=1;month<13;month++)
75 {
76 writer.AddAttribute(HtmlTextWriterAttribute.Value,month.ToString());
77 writer.RenderBeginTag(HtmlTextWriterTag.Option);
78 writer.Write(month.ToString());
79 writer.RenderEndTag();
80 }
81
82 writer.RenderEndTag();
83
84 writer.Write(" ");
85
86 writer.AddAttribute(HtmlTextWriterAttribute.Name,"Year");
87 writer.AddAttribute(HtmlTextWriterAttribute.Id,"Year");
88 writer.RenderBeginTag(HtmlTextWriterTag.Select);
89
90 for(intyear=2008;year<2015;year++)
91 {
92 writer.AddAttribute(HtmlTextWriterAttribute.Value,year.ToString());
93 writer.RenderBeginTag(HtmlTextWriterTag.Option);
94 writer.Write(year.ToString());
95 writer.RenderEndTag();
96 }
97
98 writer.RenderEndTag();
99
100 writer.RenderEndTag();
101 writer.RenderEndTag();
102
103
104 writer.RenderBeginTag(HtmlTextWriterTag.Tr);
105 writer.AddAttribute(HtmlTextWriterAttribute.Colspan,"2");
106 writer.AddAttribute(HtmlTextWriterAttribute.Align,"center");
107 writer.RenderBeginTag(HtmlTextWriterTag.Td);
108 writer.AddAttribute(HtmlTextWriterAttribute.Type,"submit");
109 writer.AddAttribute(HtmlTextWriterAttribute.Value,SubmitButtonText);
110 writer.RenderBeginTag(HtmlTextWriterTag.Input);
111 writer.RenderEndTag();
112 writer.RenderEndTag();
113 writer.RenderEndTag();
114
115 //table的结束标记
116 writer.RenderEndTag();
117
118
119
120
121 }
本章还是延续上章的例子,开发一个CreditCardForm控件。
其实本章也不难,相信大家看完后,也觉得很简单!
我们首先开谈谈继承Control和WebControl的区别:其实二者最大的区别就是在,如果我们开发的控件继承WebControl,那么我们的控件就支持更多的CSS样式。而继承于Control的自定义控件的样式相对就少些。
其实还有一个区别就在开发的规范上。我们来简单的看看上一章的自定义控件的代码,主要来看看Render方法中的代码:大家只扫一眼就可以了。
1protectedoverridevoidRender(HtmlTextWriterwriter)
2 {
3 //显示table标记
4 writer.AddStyleAttribute(HtmlTextWriterStyle.Width,"287px");
5 writer.AddStyleAttribute(HtmlTextWriterStyle.Height,"128px");
6 writer.AddStyleAttribute(HtmlTextWriterStyle.BorderWidth,"0");
7 writer.AddAttribute(HtmlTextWriterAttribute.Id,"mytable");
8 writer.RenderBeginTag(HtmlTextWriterTag.Table);
9
10 //显示table类的标记包含tr,td还有一些textbox,下拉框等
11 writer.RenderBeginTag(HtmlTextWriterTag.Tr);
12
13 writer.RenderBeginTag(HtmlTextWriterTag.Td);
14 writer.Write(PaymentMethodText);
15 writer.RenderEndTag();
16
17 writer.RenderBeginTag(HtmlTextWriterTag.Td);
18 writer.AddAttribute(HtmlTextWriterAttribute.Name,"PaymentMethod");
19 writer.AddAttribute(HtmlTextWriterAttribute.Id,"PaymentMethod");
20 writer.AddStyleAttribute(HtmlTextWriterStyle.Width,"100%");
21 writer.RenderBeginTag(HtmlTextWriterTag.Select);
22
23 writer.AddAttribute(HtmlTextWriterAttribute.Value,"0");
24 writer.RenderBeginTag(HtmlTextWriterTag.Option);
25 writer.Write("Master");
26 writer.RenderEndTag();
27
28 writer.AddAttribute(HtmlTextWriterAttribute.Value,"1");
29 writer.RenderBeginTag(HtmlTextWriterTag.Option);
30 writer.Write("Visa");
31 writer.RenderEndTag();
32
33 writer.RenderEndTag();
34 writer.RenderEndTag();
35 writer.RenderEndTag();
36
37 writer.RenderBeginTag(HtmlTextWriterTag.Tr);
38 writer.RenderBeginTag(HtmlTextWriterTag.Td);
39 writer.Write(CreditCardNoText);
40 writer.RenderEndTag();
41
42 writer.RenderBeginTag(HtmlTextWriterTag.Td);
43 writer.AddAttribute(HtmlTextWriterAttribute.Type,"text");
44 writer.AddAttribute(HtmlTextWriterAttribute.Name,"CreditCardNo");
45 writer.AddAttribute(HtmlTextWriterAttribute.Id,"CreditCardNo");
46 writer.RenderBeginTag(HtmlTextWriterTag.Input);
47 writer.RenderEndTag();
48 writer.RenderEndTag();
49 writer.RenderEndTag();
50
51 writer.RenderBeginTag(HtmlTextWriterTag.Tr);
52 writer.RenderBeginTag(HtmlTextWriterTag.Td);
53 writer.Write(CardholderNameText);
54 writer.RenderEndTag();
55
56 writer.RenderBeginTag(HtmlTextWriterTag.Td);
57 writer.AddAttribute(HtmlTextWriterAttribute.Type,"text");
58 writer.AddAttribute(HtmlTextWriterAttribute.Name,"CardholderName");
59 writer.AddAttribute(HtmlTextWriterAttribute.Id,"CardholderName");
60 writer.RenderBeginTag(HtmlTextWriterTag.Input);
61 writer.RenderEndTag();
62 writer.RenderEndTag();
63 writer.RenderEndTag();
64
65 writer.RenderBeginTag(HtmlTextWriterTag.Tr);
66 writer.RenderBeginTag(HtmlTextWriterTag.Td);
67 writer.Write(ExpirationDateText);
68 writer.RenderEndTag();
69
70 writer.RenderBeginTag(HtmlTextWriterTag.Td);
71 writer.AddAttribute(HtmlTextWriterAttribute.Name,"Month");
72 writer.AddAttribute(HtmlTextWriterAttribute.Id,"Month");
73 writer.RenderBeginTag(HtmlTextWriterTag.Select);
74 for(intmonth=1;month<13;month++)
75 {
76 writer.AddAttribute(HtmlTextWriterAttribute.Value,month.ToString());
77 writer.RenderBeginTag(HtmlTextWriterTag.Option);
78 writer.Write(month.ToString());
79 writer.RenderEndTag();
80 }
81
82 writer.RenderEndTag();
83
84 writer.Write(" ");
85
86 writer.AddAttribute(HtmlTextWriterAttribute.Name,"Year");
87 writer.AddAttribute(HtmlTextWriterAttribute.Id,"Year");
88 writer.RenderBeginTag(HtmlTextWriterTag.Select);
89
90 for(intyear=2008;year<2015;year++)
91 {
92 writer.AddAttribute(HtmlTextWriterAttribute.Value,year.ToString());
93 writer.RenderBeginTag(HtmlTextWriterTag.Option);
94 writer.Write(year.ToString());
95 writer.RenderEndTag();
96 }
97
98 writer.RenderEndTag();
99
100 writer.RenderEndTag();
101 writer.RenderEndTag();
102
103
104 writer.RenderBeginTag(HtmlTextWriterTag.Tr);
105 writer.AddAttribute(HtmlTextWriterAttribute.Colspan,"2");
106 writer.AddAttribute(HtmlTextWriterAttribute.Align,"center");
107 writer.RenderBeginTag(HtmlTextWriterTag.Td);
108 writer.AddAttribute(HtmlTextWriterAttribute.Type,"submit");
109 writer.AddAttribute(HtmlTextWriterAttribute.Value,SubmitButtonText);
110 writer.RenderBeginTag(HtmlTextWriterTag.Input);
111 writer.RenderEndTag();
112 writer.RenderEndTag();
113 writer.RenderEndTag();
114
115 //table的结束标记
116 writer.RenderEndTag();
117
118
119
120
121 }
相信这段代码大家都和熟悉。在这段代码的作用主要显示了一个table 以及table 之中的标记元素。
如果一这个控件已经写好了,加入我们想要改改table的样式,如把border设为1,或者改变显示的颜色等,那么我们就
要再次打开这段代码,修改代码。其实这就不好。为什么?
其实这个方法中的代码做了四件事:
1.显示控件最外层的包含标记,即table
2.显示最外层标记的一些属性,如border.id等
3.显示控件的主要内容 ,如,显示输入框,下拉框,按钮。
4.显示控件最外层包含标记的结束标记。
这样看来,这个方法的职责就有四个。大家应该还记得面向对象设计的原创:单一职责。虽然这个元素一般用在类上,
但是我们更加要注意,这个原则用的宗旨:使对象只有一个变化的因素。这个原则也用在方法的设计上。
就是说,我们如果想要改变最外层标记table一些属性,我们就影响了其他三个职责。同理,我们想改变其他的元素或者
内容,结果可想而知。
为此,继承WebControl的控件就更加的规范和灵活:
其实,继承于WebControl的控件的显示还是在Render方法中显示,只是这个Render方法已经不由我们来写了:
如下:
1
2 protectedoverridevoidRender(HtmlTextWriterwriter)
3 {
4 RenderBeginTag(writer);
5 RenderContens(writer);
6 RenderEndTag(writer);
7
8 }
因为我们之前说,Render方法的职责有四个。所以WebControl的Render方法就把这些职责分离了。以后我们能就
可以独立的改变一个因素了。大家也许奇怪:不是说有四个职责吗,但是上面只是显示了三个方法,其实在
如果一这个控件已经写好了,加入我们想要改改table的样式,如把border设为1,或者改变显示的颜色等,那么我们就
要再次打开这段代码,修改代码。其实这就不好。为什么?
其实这个方法中的代码做了四件事:
1.显示控件最外层的包含标记,即table
2.显示最外层标记的一些属性,如border.id等
3.显示控件的主要内容 ,如,显示输入框,下拉框,按钮。
4.显示控件最外层包含标记的结束标记。
这样看来,这个方法的职责就有四个。大家应该还记得面向对象设计的原创:单一职责。虽然这个元素一般用在类上,
但是我们更加要注意,这个原则用的宗旨:使对象只有一个变化的因素。这个原则也用在方法的设计上。
就是说,我们如果想要改变最外层标记table一些属性,我们就影响了其他三个职责。同理,我们想改变其他的元素或者
内容,结果可想而知。
为此,继承WebControl的控件就更加的规范和灵活:
其实,继承于WebControl的控件的显示还是在Render方法中显示,只是这个Render方法已经不由我们来写了:
如下:
1
2 protectedoverridevoidRender(HtmlTextWriterwriter)
3 {
4 RenderBeginTag(writer);
5 RenderContens(writer);
6 RenderEndTag(writer);
7
8 }
因为我们之前说,Render方法的职责有四个。所以WebControl的Render方法就把这些职责分离了。以后我们能就
可以独立的改变一个因素了。大家也许奇怪:不是说有四个职责吗,但是上面只是显示了三个方法,其实在
RenderBeginTag()方法中包含显示最外层标记样式的方法。 所以我们只要分别重写这三个方法,一个继承WebControl的自定义的控件就成了。不要怕,方法很多,但是很简单,而
且代码我们都懂,之前差不多都讲了的。
我想把写成后的控件给大家看看,让大家看下我们本章的目标:
大家看见没有:是不是支持的样式多了!!!
好了,我们来写吧:不难哦:)
首先看看我们要的写方法以及他们的功能:
protectedoverridevoidRender(HtmlTextWriterwriter)
{
//显示最外层包含标记开始的标记,即,显示<table..>
RenderBeginTag(writer);
//显示table标记内的内容,如<tr><td><input/>等
RenderContens(writer);
//显示最外层包含标记结束标记</table
RenderEndTag(writer);
}
现在的思路很清晰吧,首先来显示<table....>
很简单,只要如下就可以了。
1 protectedoverrideHtmlTextWriterTagTagKey
2 {
3 get
4 {
5 returnHtmlTextWriterTag.Table;
6 }
7 }
不要奇怪,因为RenderBeginTag()方法内部实际是调用了这个属性来显示的最外层的包含标记的。
好了,第一步就写完了啊!简答吧!
下面来显示table的样式,因为我们的控件的最外层的标记是table,显示他的样式只要这样就OK了。
1 protectedoverrideStyleCreateControlStyle()
2 {
3 returnnewTableStyle(ViewState);
4 }
又写完了一部分。。不难吧!接着看啊!
如果你的最外层的标记是<div >那么,上面的那个方法你都不用写.
且代码我们都懂,之前差不多都讲了的。
我想把写成后的控件给大家看看,让大家看下我们本章的目标:
大家看见没有:是不是支持的样式多了!!!
好了,我们来写吧:不难哦:)
首先看看我们要的写方法以及他们的功能:
protectedoverridevoidRender(HtmlTextWriterwriter)
{
//显示最外层包含标记开始的标记,即,显示<table..>
RenderBeginTag(writer);
//显示table标记内的内容,如<tr><td><input/>等
RenderContens(writer);
//显示最外层包含标记结束标记</table
RenderEndTag(writer);
}
现在的思路很清晰吧,首先来显示<table....>
很简单,只要如下就可以了。
1 protectedoverrideHtmlTextWriterTagTagKey
2 {
3 get
4 {
5 returnHtmlTextWriterTag.Table;
6 }
7 }
不要奇怪,因为RenderBeginTag()方法内部实际是调用了这个属性来显示的最外层的包含标记的。
好了,第一步就写完了啊!简答吧!
下面来显示table的样式,因为我们的控件的最外层的标记是table,显示他的样式只要这样就OK了。
1 protectedoverrideStyleCreateControlStyle()
2 {
3 returnnewTableStyle(ViewState);
4 }
又写完了一部分。。不难吧!接着看啊!
如果你的最外层的标记是<div >那么,上面的那个方法你都不用写.
下面就写了RenderContent方法,不难,只记住这个方法的职责:显示最外层标记的内容: 如下:
1protectedoverridevoidRenderContents(HtmlTextWriterwriter)
2 {
3 writer.RenderBeginTag(HtmlTextWriterTag.Tr);
4 writer.RenderBeginTag(HtmlTextWriterTag.Td);
5 writer.Write(PaymentMethod);
6 writer.RenderEndTag();
7
8 writer.RenderBeginTag(HtmlTextWriterTag.Td);
9
10 writer.AddAttribute(HtmlTextWriterAttribute.Id,PaymentMethodListId);
11 writer.AddAttribute(HtmlTextWriterAttribute.Name,PaymentMethodListName);
12 writer.AddStyleAttribute(HtmlTextWriterStyle.Width,"100%");
13 writer.RenderBeginTag(HtmlTextWriterTag.Select);
14
15 writer.AddAttribute(HtmlTextWriterAttribute.Value,"0");
16 writer.RenderBeginTag(HtmlTextWriterTag.Option);
17 writer.Write("Master");
18 writer.RenderEndTag();
19
20 writer.AddAttribute(HtmlTextWriterAttribute.Value,"1");
21 writer.RenderBeginTag(HtmlTextWriterTag.Option);
22 writer.Write("Visa");
23 writer.RenderEndTag();
24
25 writer.RenderEndTag();
26
27 writer.RenderEndTag();
28 writer.RenderEndTag();
29//****************************************************************************
30 writer.RenderBeginTag(HtmlTextWriterTag.Tr);
31 writer.RenderBeginTag(HtmlTextWriterTag.Td);
32 writer.Write(CreditCardNo);
33 writer.RenderEndTag();
34
35 writer.RenderBeginTag(HtmlTextWriterTag.Td);
36 writer.AddAttribute(HtmlTextWriterAttribute.Id,CreditCardNoTextId);
37 writer.AddAttribute(HtmlTextWriterAttribute.Name,CreditCardNoTextName);
38 writer.AddAttribute(HtmlTextWriterAttribute.Type,"text");
39 writer.RenderBeginTag(HtmlTextWriterTag.Input);
40 writer.RenderEndTag();
41
42 writer.RenderEndTag();
43 writer.RenderEndTag();
44//**************************************************************************************
45
46 writer.RenderBeginTag(HtmlTextWriterTag.Tr);
47 writer.RenderBeginTag(HtmlTextWriterTag.Td);
48 writer.Write(CardholderName);
49 writer.RenderEndTag();
50
51 writer.RenderBeginTag(HtmlTextWriterTag.Td);
52 writer.AddAttribute(HtmlTextWriterAttribute.Name,CardholderNameTextName);
53 writer.AddAttribute(HtmlTextWriterAttribute.Id,CardholderNameTextId);
54 writer.AddAttribute(HtmlTextWriterAttribute.Type,"text");
55 writer.RenderBeginTag(HtmlTextWriterTag.Input);
56 writer.RenderEndTag();
57
58 writer.RenderEndTag();
59 writer.RenderEndTag();
60//***************************************************************************************
61
62 writer.RenderBeginTag(HtmlTextWriterTag.Tr);
63 writer.RenderBeginTag(HtmlTextWriterTag.Td);
64 writer.Write(ExpirationDate);
65 writer.RenderEndTag();
66
67 writer.RenderBeginTag(HtmlTextWriterTag.Td);
68 writer.AddAttribute(HtmlTextWriterAttribute.Name,MonthListName);
69 writer.AddAttribute(HtmlTextWriterAttribute.Id,MonthListId);
70 writer.RenderBeginTag(HtmlTextWriterTag.Select);
71
72 for(intmonth=1;month<13;month++)
73 {
74 writer.AddAttribute(HtmlTextWriterAttribute.Value,month.ToString());
75 writer.RenderBeginTag(HtmlTextWriterTag.Option);
76 writer.Write(month.ToString());
77 writer.RenderEndTag();
78 }
79 writer.RenderEndTag();
80
81 /
82
83 writer.Write(" ");
84
85 /
86 writer.AddAttribute(HtmlTextWriterAttribute.Name,YearListName);
87 writer.AddAttribute(HtmlTextWriterAttribute.Id,YearListId);
88 writer.RenderBeginTag(HtmlTextWriterTag.Select);
89
90 for(intyear=2008;year<2015;year++)
91 {
92 writer.AddAttribute(HtmlTextWriterAttribute.Value,year.ToString());
93 writer.RenderBeginTag(HtmlTextWriterTag.Option);
94 writer.Write(year.ToString());
95 writer.RenderEndTag();
96 }
97 writer.RenderEndTag();
98
99 writer.RenderEndTag();
100 writer.RenderEndTag();
101//*****************************************************************************
102
103 writer.RenderBeginTag(HtmlTextWriterTag.Tr);
104 writer.AddAttribute(HtmlTextWriterAttribute.Colspan,"2");
105 writer.AddAttribute(HtmlTextWriterAttribute.Align,"center");
106 writer.RenderBeginTag(HtmlTextWriterTag.Td);
107 writer.AddAttribute(HtmlTextWriterAttribute.Name,SubmitButtonName);
108 writer.AddAttribute(HtmlTextWriterAttribute.Value,SubmitButtonText);
109 writer.AddAttribute(HtmlTextWriterAttribute.Id,SubmitButtonId);
110 writer.AddAttribute(HtmlTextWriterAttribute.Type,"submit");
111 writer.RenderBeginTag(HtmlTextWriterTag.Input);
112 writer.RenderEndTag();
113
114 writer.RenderEndTag();
115 writer.RenderEndTag();
116
117//******************************************************************************
118
119
120 }
1protectedoverridevoidRenderContents(HtmlTextWriterwriter)
2 {
3 writer.RenderBeginTag(HtmlTextWriterTag.Tr);
4 writer.RenderBeginTag(HtmlTextWriterTag.Td);
5 writer.Write(PaymentMethod);
6 writer.RenderEndTag();
7
8 writer.RenderBeginTag(HtmlTextWriterTag.Td);
9
10 writer.AddAttribute(HtmlTextWriterAttribute.Id,PaymentMethodListId);
11 writer.AddAttribute(HtmlTextWriterAttribute.Name,PaymentMethodListName);
12 writer.AddStyleAttribute(HtmlTextWriterStyle.Width,"100%");
13 writer.RenderBeginTag(HtmlTextWriterTag.Select);
14
15 writer.AddAttribute(HtmlTextWriterAttribute.Value,"0");
16 writer.RenderBeginTag(HtmlTextWriterTag.Option);
17 writer.Write("Master");
18 writer.RenderEndTag();
19
20 writer.AddAttribute(HtmlTextWriterAttribute.Value,"1");
21 writer.RenderBeginTag(HtmlTextWriterTag.Option);
22 writer.Write("Visa");
23 writer.RenderEndTag();
24
25 writer.RenderEndTag();
26
27 writer.RenderEndTag();
28 writer.RenderEndTag();
29//****************************************************************************
30 writer.RenderBeginTag(HtmlTextWriterTag.Tr);
31 writer.RenderBeginTag(HtmlTextWriterTag.Td);
32 writer.Write(CreditCardNo);
33 writer.RenderEndTag();
34
35 writer.RenderBeginTag(HtmlTextWriterTag.Td);
36 writer.AddAttribute(HtmlTextWriterAttribute.Id,CreditCardNoTextId);
37 writer.AddAttribute(HtmlTextWriterAttribute.Name,CreditCardNoTextName);
38 writer.AddAttribute(HtmlTextWriterAttribute.Type,"text");
39 writer.RenderBeginTag(HtmlTextWriterTag.Input);
40 writer.RenderEndTag();
41
42 writer.RenderEndTag();
43 writer.RenderEndTag();
44//**************************************************************************************
45
46 writer.RenderBeginTag(HtmlTextWriterTag.Tr);
47 writer.RenderBeginTag(HtmlTextWriterTag.Td);
48 writer.Write(CardholderName);
49 writer.RenderEndTag();
50
51 writer.RenderBeginTag(HtmlTextWriterTag.Td);
52 writer.AddAttribute(HtmlTextWriterAttribute.Name,CardholderNameTextName);
53 writer.AddAttribute(HtmlTextWriterAttribute.Id,CardholderNameTextId);
54 writer.AddAttribute(HtmlTextWriterAttribute.Type,"text");
55 writer.RenderBeginTag(HtmlTextWriterTag.Input);
56 writer.RenderEndTag();
57
58 writer.RenderEndTag();
59 writer.RenderEndTag();
60//***************************************************************************************
61
62 writer.RenderBeginTag(HtmlTextWriterTag.Tr);
63 writer.RenderBeginTag(HtmlTextWriterTag.Td);
64 writer.Write(ExpirationDate);
65 writer.RenderEndTag();
66
67 writer.RenderBeginTag(HtmlTextWriterTag.Td);
68 writer.AddAttribute(HtmlTextWriterAttribute.Name,MonthListName);
69 writer.AddAttribute(HtmlTextWriterAttribute.Id,MonthListId);
70 writer.RenderBeginTag(HtmlTextWriterTag.Select);
71
72 for(intmonth=1;month<13;month++)
73 {
74 writer.AddAttribute(HtmlTextWriterAttribute.Value,month.ToString());
75 writer.RenderBeginTag(HtmlTextWriterTag.Option);
76 writer.Write(month.ToString());
77 writer.RenderEndTag();
78 }
79 writer.RenderEndTag();
80
81 /
82
83 writer.Write(" ");
84
85 /
86 writer.AddAttribute(HtmlTextWriterAttribute.Name,YearListName);
87 writer.AddAttribute(HtmlTextWriterAttribute.Id,YearListId);
88 writer.RenderBeginTag(HtmlTextWriterTag.Select);
89
90 for(intyear=2008;year<2015;year++)
91 {
92 writer.AddAttribute(HtmlTextWriterAttribute.Value,year.ToString());
93 writer.RenderBeginTag(HtmlTextWriterTag.Option);
94 writer.Write(year.ToString());
95 writer.RenderEndTag();
96 }
97 writer.RenderEndTag();
98
99 writer.RenderEndTag();
100 writer.RenderEndTag();
101//*****************************************************************************
102
103 writer.RenderBeginTag(HtmlTextWriterTag.Tr);
104 writer.AddAttribute(HtmlTextWriterAttribute.Colspan,"2");
105 writer.AddAttribute(HtmlTextWriterAttribute.Align,"center");
106 writer.RenderBeginTag(HtmlTextWriterTag.Td);
107 writer.AddAttribute(HtmlTextWriterAttribute.Name,SubmitButtonName);
108 writer.AddAttribute(HtmlTextWriterAttribute.Value,SubmitButtonText);
109 writer.AddAttribute(HtmlTextWriterAttribute.Id,SubmitButtonId);
110 writer.AddAttribute(HtmlTextWriterAttribute.Type,"submit");
111 writer.RenderBeginTag(HtmlTextWriterTag.Input);
112 writer.RenderEndTag();
113
114 writer.RenderEndTag();
115 writer.RenderEndTag();
116
117//******************************************************************************
118
119
120 }
这样就完了,大家看看上面的代码,很熟悉吧,是啊,只是把我们之前的代码分割开了,写在不同的地方!
最后的那个RendEndTag(),你不写!因为,你override那个TagKey时,就已经调用了结束标记的方法。这样,一个继承WebControl的控件就完了!
好了,写完了:完整的代码如下:
1usingSystem;
2usingSystem.Collections.Generic;
3usingSystem.Text;
4usingSystem.Web;
5usingSystem.Web.UI;
6usingSystem.Web.UI.WebControls;
7
8namespaceCreditCardForm
9{
10 publicclassCreditCardForm5:WebControl
11 {
12 #region重写包含标记
13
14 protectedoverrideStyleCreateControlStyle()
15 {
16 returnnewTableStyle(ViewState);
17 }
18
19 protectedoverrideHtmlTextWriterTagTagKey
20 {
21 get
22 {
23 returnHtmlTextWriterTag.Table;
24 }
25 }
26
27 //publicvirtualstringBackImageUrl
28 //{
29 // get
30 // {
31 // return((TableStyle)ControlStyle).BackImageUrl;
32 // }
33 // set
34 // {
35 // ((TableStyle)ControlStyle).BackImageUrl=value;
36 // }
37 //}
38
39
40 #endregion
41 #regionID
42 protectedvirtualstringPaymentMethodListId
43 {
44 get
45 {
46 return"PaymentMethod";
47 }
48 }
49
50 protectedvirtualstringCreditCardNoTextId
51 {
52 get
53 {
54 return"CreditCardNo";
55 }
56 }
57
58 protectedvirtualstringCardholderNameTextId
59 {
60 get
61 {
62 return"CardholderName";
63 }
64 }
65
66 protectedvirtualstringMonthListId
67 {
68 get
69 {
70 return"Month";
71 }
72 }
73
74 protectedvirtualstringYearListId
75 {
76 get
77 {
78 return "Year";
79 }
80 }
81
82 protectedvirtualstringSubmitButtonId
83 {
84 get
85 {
86 return"Submit";
87 }
88 }
89
90 #endregion
91 #regionname
92 protectedvirtualstringPaymentMethodListName
93 {
94 get
95 {
96 return"PaymentMethod";
97 }
98 }
99
100 protectedvirtualstringCreditCardNoTextName
101 {
102 get
103 {
104 return"CreditCardNo";
105 }
106 }
107
108 protectedvirtualstringCardholderNameTextName
109 {
110 get
111 {
112 return"CardholderName";
113 }
114 }
115
116 protectedvirtualstringMonthListName
117 {
118 get
119 {
120 return"Month";
121 }
122 }
123
124 protectedvirtualstringYearListName
125 {
126 get
127 {
128 return"Year";
129 }
130 }
131
132 protectedvirtualstringSubmitButtonName
133 {
134 get
135 {
136 return"Sumit";
137 }
138 }
139 #endregion
140
141 #region 属性
142 publicvirtualstringPaymentMethod
143 {
144 get
145 {
146 returnViewState["PaymentMethod"]!=null?(string)ViewState["PaymentMethod"]:"支付方式";
147
148 }
149 set
150 {
151 ViewState["PaymentMethod"]=value;
152 }
153 }
154
155 publicvirtualstringCreditCardNo
156 {
157 get
158 {
159 returnViewState["CreditCardNo"]!=null?(string)ViewState["CreditCardNo"]:"信用卡号";
160 }
161 set
162 {
163 ViewState["CreditCardNo"]=value;
164 }
165 }
166
167 publicvirtualstringCardholderName
168 {
169 get
170 {
171 returnViewState["CardholderName"]!=null?(string)ViewState["CardholderName"]:"持卡人";
172 }
173 set
174 {
175 ViewState["CreditCardName"]=value;
176 }
177 }
178
179 publicvirtualstringExpirationDate
180 {
181 get
182 {
183 returnViewState["ExpirationDate"]!=null?(string)ViewState["ExpirationDate"]:"过期时间";
184 }
185 set
186 {
187 ViewState["ExpirationDate"]=value;
188 }
189 }
190
191 publicvirtualstringSubmitButtonText
192 {
193 get
194 {
195 returnViewState["SubmitButtonText"]!=null?(string)ViewState["SubmitButtonText"]:"提交";
196 }
197 set
198 {
199 ViewState["SubmitButtonText"]=value;
200 }
201
202 }
203 #endregion
204 protectedoverridevoidRenderContents(HtmlTextWriterwriter)
205 {
206 writer.RenderBeginTag(HtmlTextWriterTag.Tr);
207 writer.RenderBeginTag(HtmlTextWriterTag.Td);
208 writer.Write(PaymentMethod);
209 writer.RenderEndTag();
210
211 writer.RenderBeginTag(HtmlTextWriterTag.Td);
212
213 writer.AddAttribute(HtmlTextWriterAttribute.Id,PaymentMethodListId);
214 writer.AddAttribute(HtmlTextWriterAttribute.Name,PaymentMethodListName);
215 writer.AddStyleAttribute(HtmlTextWriterStyle.Width,"100%");
216 writer.RenderBeginTag(HtmlTextWriterTag.Select);
217
218 writer.AddAttribute(HtmlTextWriterAttribute.Value,"0");
219 writer.RenderBeginTag(HtmlTextWriterTag.Option);
220 writer.Write("Master");
221 writer.RenderEndTag();
222
223 writer.AddAttribute(HtmlTextWriterAttribute.Value,"1");
224 writer.RenderBeginTag(HtmlTextWriterTag.Option);
225 writer.Write("Visa");
226 writer.RenderEndTag();
227
228 writer.RenderEndTag();
229
230 writer.RenderEndTag();
231 writer.RenderEndTag();
232//****************************************************************************
233 writer.RenderBeginTag(HtmlTextWriterTag.Tr);
234 writer.RenderBeginTag(HtmlTextWriterTag.Td);
235 writer.Write(CreditCardNo);
236 writer.RenderEndTag();
237
238 writer.RenderBeginTag(HtmlTextWriterTag.Td);
239 writer.AddAttribute(HtmlTextWriterAttribute.Id,CreditCardNoTextId);
240 writer.AddAttribute(HtmlTextWriterAttribute.Name,CreditCardNoTextName);
241 writer.AddAttribute(HtmlTextWriterAttribute.Type,"text");
242 writer.RenderBeginTag(HtmlTextWriterTag.Input);
243 writer.RenderEndTag();
244
245 writer.RenderEndTag();
246 writer.RenderEndTag();
247//**************************************************************************************
248
249 writer.RenderBeginTag(HtmlTextWriterTag.Tr);
250 writer.RenderBeginTag(HtmlTextWriterTag.Td);
251 writer.Write(CardholderName);
252 writer.RenderEndTag();
253
254 writer.RenderBeginTag(HtmlTextWriterTag.Td);
255 writer.AddAttribute(HtmlTextWriterAttribute.Name,CardholderNameTextName);
256 writer.AddAttribute(HtmlTextWriterAttribute.Id,CardholderNameTextId);
257 writer.AddAttribute(HtmlTextWriterAttribute.Type,"text");
258 writer.RenderBeginTag(HtmlTextWriterTag.Input);
259 writer.RenderEndTag();
260
261 writer.RenderEndTag();
262 writer.RenderEndTag();
263//***************************************************************************************
264
265 writer.RenderBeginTag(HtmlTextWriterTag.Tr);
266 writer.RenderBeginTag(HtmlTextWriterTag.Td);
267 writer.Write(ExpirationDate);
268 writer.RenderEndTag();
269
270 writer.RenderBeginTag(HtmlTextWriterTag.Td);
271 writer.AddAttribute(HtmlTextWriterAttribute.Name,MonthListName);
272 writer.AddAttribute(HtmlTextWriterAttribute.Id,MonthListId);
273 writer.RenderBeginTag(HtmlTextWriterTag.Select);
274
275 for(intmonth=1;month<13;month++)
276 {
277 writer.AddAttribute(HtmlTextWriterAttribute.Value,month.ToString());
278 writer.RenderBeginTag(HtmlTextWriterTag.Option);
279 writer.Write(month.ToString());
280 writer.RenderEndTag();
281 }
282 writer.RenderEndTag();
283
284 /
285
286 writer.Write(" ");
287
288 /
289 writer.AddAttribute(HtmlTextWriterAttribute.Name,YearListName);
290 writer.AddAttribute(HtmlTextWriterAttribute.Id,YearListId);
291 writer.RenderBeginTag(HtmlTextWriterTag.Select);
292
293 for(intyear=2008;year<2015;year++)
294 {
295 writer.AddAttribute(HtmlTextWriterAttribute.Value,year.ToString());
296 writer.RenderBeginTag(HtmlTextWriterTag.Option);
297 writer.Write(year.ToString());
298 writer.RenderEndTag();
299 }
300 writer.RenderEndTag();
301
302 writer.RenderEndTag();
303 writer.RenderEndTag();
304//*****************************************************************************
305
306 writer.RenderBeginTag(HtmlTextWriterTag.Tr);
307 writer.AddAttribute(HtmlTextWriterAttribute.Colspan,"2");
308 writer.AddAttribute(HtmlTextWriterAttribute.Align,"center");
309 writer.RenderBeginTag(HtmlTextWriterTag.Td);
310 writer.AddAttribute(HtmlTextWriterAttribute.Name,SubmitButtonName);
311 writer.AddAttribute(HtmlTextWriterAttribute.Value,SubmitButtonText);
312 writer.AddAttribute(HtmlTextWriterAttribute.Id,SubmitButtonId);
313 writer.AddAttribute(HtmlTextWriterAttribute.Type,"submit");
314 writer.RenderBeginTag(HtmlTextWriterTag.Input);
315 writer.RenderEndTag();
316
317 writer.RenderEndTag();
318 writer.RenderEndTag();
319
320//******************************************************************************
321
322
323 }
324
325 }
326}
327
希望大家继续支持啊!谢谢!
最后的那个RendEndTag(),你不写!因为,你override那个TagKey时,就已经调用了结束标记的方法。这样,一个继承WebControl的控件就完了!
好了,写完了:完整的代码如下:
1usingSystem;
2usingSystem.Collections.Generic;
3usingSystem.Text;
4usingSystem.Web;
5usingSystem.Web.UI;
6usingSystem.Web.UI.WebControls;
7
8namespaceCreditCardForm
9{
10 publicclassCreditCardForm5:WebControl
11 {
12 #region重写包含标记
13
14 protectedoverrideStyleCreateControlStyle()
15 {
16 returnnewTableStyle(ViewState);
17 }
18
19 protectedoverrideHtmlTextWriterTagTagKey
20 {
21 get
22 {
23 returnHtmlTextWriterTag.Table;
24 }
25 }
26
27 //publicvirtualstringBackImageUrl
28 //{
29 // get
30 // {
31 // return((TableStyle)ControlStyle).BackImageUrl;
32 // }
33 // set
34 // {
35 // ((TableStyle)ControlStyle).BackImageUrl=value;
36 // }
37 //}
38
39
40 #endregion
41 #regionID
42 protectedvirtualstringPaymentMethodListId
43 {
44 get
45 {
46 return"PaymentMethod";
47 }
48 }
49
50 protectedvirtualstringCreditCardNoTextId
51 {
52 get
53 {
54 return"CreditCardNo";
55 }
56 }
57
58 protectedvirtualstringCardholderNameTextId
59 {
60 get
61 {
62 return"CardholderName";
63 }
64 }
65
66 protectedvirtualstringMonthListId
67 {
68 get
69 {
70 return"Month";
71 }
72 }
73
74 protectedvirtualstringYearListId
75 {
76 get
77 {
78 return "Year";
79 }
80 }
81
82 protectedvirtualstringSubmitButtonId
83 {
84 get
85 {
86 return"Submit";
87 }
88 }
89
90 #endregion
91 #regionname
92 protectedvirtualstringPaymentMethodListName
93 {
94 get
95 {
96 return"PaymentMethod";
97 }
98 }
99
100 protectedvirtualstringCreditCardNoTextName
101 {
102 get
103 {
104 return"CreditCardNo";
105 }
106 }
107
108 protectedvirtualstringCardholderNameTextName
109 {
110 get
111 {
112 return"CardholderName";
113 }
114 }
115
116 protectedvirtualstringMonthListName
117 {
118 get
119 {
120 return"Month";
121 }
122 }
123
124 protectedvirtualstringYearListName
125 {
126 get
127 {
128 return"Year";
129 }
130 }
131
132 protectedvirtualstringSubmitButtonName
133 {
134 get
135 {
136 return"Sumit";
137 }
138 }
139 #endregion
140
141 #region 属性
142 publicvirtualstringPaymentMethod
143 {
144 get
145 {
146 returnViewState["PaymentMethod"]!=null?(string)ViewState["PaymentMethod"]:"支付方式";
147
148 }
149 set
150 {
151 ViewState["PaymentMethod"]=value;
152 }
153 }
154
155 publicvirtualstringCreditCardNo
156 {
157 get
158 {
159 returnViewState["CreditCardNo"]!=null?(string)ViewState["CreditCardNo"]:"信用卡号";
160 }
161 set
162 {
163 ViewState["CreditCardNo"]=value;
164 }
165 }
166
167 publicvirtualstringCardholderName
168 {
169 get
170 {
171 returnViewState["CardholderName"]!=null?(string)ViewState["CardholderName"]:"持卡人";
172 }
173 set
174 {
175 ViewState["CreditCardName"]=value;
176 }
177 }
178
179 publicvirtualstringExpirationDate
180 {
181 get
182 {
183 returnViewState["ExpirationDate"]!=null?(string)ViewState["ExpirationDate"]:"过期时间";
184 }
185 set
186 {
187 ViewState["ExpirationDate"]=value;
188 }
189 }
190
191 publicvirtualstringSubmitButtonText
192 {
193 get
194 {
195 returnViewState["SubmitButtonText"]!=null?(string)ViewState["SubmitButtonText"]:"提交";
196 }
197 set
198 {
199 ViewState["SubmitButtonText"]=value;
200 }
201
202 }
203 #endregion
204 protectedoverridevoidRenderContents(HtmlTextWriterwriter)
205 {
206 writer.RenderBeginTag(HtmlTextWriterTag.Tr);
207 writer.RenderBeginTag(HtmlTextWriterTag.Td);
208 writer.Write(PaymentMethod);
209 writer.RenderEndTag();
210
211 writer.RenderBeginTag(HtmlTextWriterTag.Td);
212
213 writer.AddAttribute(HtmlTextWriterAttribute.Id,PaymentMethodListId);
214 writer.AddAttribute(HtmlTextWriterAttribute.Name,PaymentMethodListName);
215 writer.AddStyleAttribute(HtmlTextWriterStyle.Width,"100%");
216 writer.RenderBeginTag(HtmlTextWriterTag.Select);
217
218 writer.AddAttribute(HtmlTextWriterAttribute.Value,"0");
219 writer.RenderBeginTag(HtmlTextWriterTag.Option);
220 writer.Write("Master");
221 writer.RenderEndTag();
222
223 writer.AddAttribute(HtmlTextWriterAttribute.Value,"1");
224 writer.RenderBeginTag(HtmlTextWriterTag.Option);
225 writer.Write("Visa");
226 writer.RenderEndTag();
227
228 writer.RenderEndTag();
229
230 writer.RenderEndTag();
231 writer.RenderEndTag();
232//****************************************************************************
233 writer.RenderBeginTag(HtmlTextWriterTag.Tr);
234 writer.RenderBeginTag(HtmlTextWriterTag.Td);
235 writer.Write(CreditCardNo);
236 writer.RenderEndTag();
237
238 writer.RenderBeginTag(HtmlTextWriterTag.Td);
239 writer.AddAttribute(HtmlTextWriterAttribute.Id,CreditCardNoTextId);
240 writer.AddAttribute(HtmlTextWriterAttribute.Name,CreditCardNoTextName);
241 writer.AddAttribute(HtmlTextWriterAttribute.Type,"text");
242 writer.RenderBeginTag(HtmlTextWriterTag.Input);
243 writer.RenderEndTag();
244
245 writer.RenderEndTag();
246 writer.RenderEndTag();
247//**************************************************************************************
248
249 writer.RenderBeginTag(HtmlTextWriterTag.Tr);
250 writer.RenderBeginTag(HtmlTextWriterTag.Td);
251 writer.Write(CardholderName);
252 writer.RenderEndTag();
253
254 writer.RenderBeginTag(HtmlTextWriterTag.Td);
255 writer.AddAttribute(HtmlTextWriterAttribute.Name,CardholderNameTextName);
256 writer.AddAttribute(HtmlTextWriterAttribute.Id,CardholderNameTextId);
257 writer.AddAttribute(HtmlTextWriterAttribute.Type,"text");
258 writer.RenderBeginTag(HtmlTextWriterTag.Input);
259 writer.RenderEndTag();
260
261 writer.RenderEndTag();
262 writer.RenderEndTag();
263//***************************************************************************************
264
265 writer.RenderBeginTag(HtmlTextWriterTag.Tr);
266 writer.RenderBeginTag(HtmlTextWriterTag.Td);
267 writer.Write(ExpirationDate);
268 writer.RenderEndTag();
269
270 writer.RenderBeginTag(HtmlTextWriterTag.Td);
271 writer.AddAttribute(HtmlTextWriterAttribute.Name,MonthListName);
272 writer.AddAttribute(HtmlTextWriterAttribute.Id,MonthListId);
273 writer.RenderBeginTag(HtmlTextWriterTag.Select);
274
275 for(intmonth=1;month<13;month++)
276 {
277 writer.AddAttribute(HtmlTextWriterAttribute.Value,month.ToString());
278 writer.RenderBeginTag(HtmlTextWriterTag.Option);
279 writer.Write(month.ToString());
280 writer.RenderEndTag();
281 }
282 writer.RenderEndTag();
283
284 /
285
286 writer.Write(" ");
287
288 /
289 writer.AddAttribute(HtmlTextWriterAttribute.Name,YearListName);
290 writer.AddAttribute(HtmlTextWriterAttribute.Id,YearListId);
291 writer.RenderBeginTag(HtmlTextWriterTag.Select);
292
293 for(intyear=2008;year<2015;year++)
294 {
295 writer.AddAttribute(HtmlTextWriterAttribute.Value,year.ToString());
296 writer.RenderBeginTag(HtmlTextWriterTag.Option);
297 writer.Write(year.ToString());
298 writer.RenderEndTag();
299 }
300 writer.RenderEndTag();
301
302 writer.RenderEndTag();
303 writer.RenderEndTag();
304//*****************************************************************************
305
306 writer.RenderBeginTag(HtmlTextWriterTag.Tr);
307 writer.AddAttribute(HtmlTextWriterAttribute.Colspan,"2");
308 writer.AddAttribute(HtmlTextWriterAttribute.Align,"center");
309 writer.RenderBeginTag(HtmlTextWriterTag.Td);
310 writer.AddAttribute(HtmlTextWriterAttribute.Name,SubmitButtonName);
311 writer.AddAttribute(HtmlTextWriterAttribute.Value,SubmitButtonText);
312 writer.AddAttribute(HtmlTextWriterAttribute.Id,SubmitButtonId);
313 writer.AddAttribute(HtmlTextWriterAttribute.Type,"submit");
314 writer.RenderBeginTag(HtmlTextWriterTag.Input);
315 writer.RenderEndTag();
316
317 writer.RenderEndTag();
318 writer.RenderEndTag();
319
320//******************************************************************************
321
322
323 }
324
325 }
326}
327
希望大家继续支持啊!谢谢!
第三章 为控件添加事件
好了,我们之前以前开发一个控件。而且也添加了属性,开发也很规范,但是那个控件还差最后一点:添加事件。
ASP.NET的开发都是事件驱动的,现在我们就来为控件添加事件。在说事件之前,希望大家对C#的语法要熟悉,对委托很事件要懂。
其实定义事件的步骤很简单:
1.声明一个委托。
2.定义一个携带事件信息的类。
3.定义事件4.定义一个通事件发生后,通知其他对象的方法首先来理清一下我们的思路:
1.在下拉框中选中一个值,并且在输入框中也输入相应的值。
2.我们在页面点击“提交”按钮,按钮就触发我们自定义的一个事件Validate(验证输入信息的正确行)。
我们在提交的时候要把控件的信息传给服务器,所以我们要定义一个事件信息类,来携带事件发生时,把个信息类送到服务器。
事件定义如下:
1.定义一个携带事件信息的类。
1usingSystem;
2usingSystem.Collections.Generic;
3usingSystem.Text;
4
5namespaceCreditCardForm
6{
7 publicclassValidateCreditCardFormEventArgs:EventArgs
8 {
9 privatestringpaymentMethod;
10 publicstringPaymentMethod
11 {
12 get
13 {
14 returnthis.paymentMethod;
15 }
16 }
17
18
19 privatestringcreditCardNo;
20 publicstringCreditCardNo
21 {
22 get
23 {
24 returnthis.creditCardNo;
25 }
26 }
27
28
29 privatestringcardholderName;
30 publicstringCardholderName
31 {
32 get
33 {
34 returnthis.cardholderName;
35 }
36 }
37
38 privateDateTimeexpirationDate;
39 publicDateTimeExpirationDate
40 {
41 get
42 {
43 returnthis.expirationDate;
44 }
45 }
46
47
48 publicValidateCreditCardFormEventArgs(stringpaymentmenthod,stringcreditcardno,
49 stringcardholdername,DateTimeexpirationdate)
50 {
51 this.paymentMethod=paymentmenthod;
52 this.creditCardNo=creditcardno;
53 this.cardholderName=cardholdername;
54 this.expirationDate=expirationdate;
55 }
56 }
57}
58
2.声明一个委托。
1usingSystem;
2usingSystem.Collections.Generic;
3usingSystem.Text;
4
5namespaceCreditCardForm
6{
7 publicdelegatevoidValidateCreditCardFormEventHandler(objectsender,ValidateCreditCardFormEventArgsargs);
8}
9
3.定义事件
1 publiceventValidateCreditCardFormEventHandlerValidateCreditCardForm;
4.通事件发生后,通知其他对象的方法
1
2//这个方法是受保护的虚方法
3protectedvoidOnValidateCreditCardForm(ValidateCreditCardFormEventArgsargs)
4 {
5 if(ValidateCreditCardForm!=null)
6 handler(this,args);
7 }
这样几个步骤之后,控件的事件就写完了。大家试试! 有问题,我们下篇接着说!
今天写到这里,希望大家反馈信息,听听大家的想法!
ASP.NET的开发都是事件驱动的,现在我们就来为控件添加事件。在说事件之前,希望大家对C#的语法要熟悉,对委托很事件要懂。
其实定义事件的步骤很简单:
1.声明一个委托。
2.定义一个携带事件信息的类。
3.定义事件4.定义一个通事件发生后,通知其他对象的方法首先来理清一下我们的思路:
1.在下拉框中选中一个值,并且在输入框中也输入相应的值。
2.我们在页面点击“提交”按钮,按钮就触发我们自定义的一个事件Validate(验证输入信息的正确行)。
我们在提交的时候要把控件的信息传给服务器,所以我们要定义一个事件信息类,来携带事件发生时,把个信息类送到服务器。
事件定义如下:
1.定义一个携带事件信息的类。
1usingSystem;
2usingSystem.Collections.Generic;
3usingSystem.Text;
4
5namespaceCreditCardForm
6{
7 publicclassValidateCreditCardFormEventArgs:EventArgs
8 {
9 privatestringpaymentMethod;
10 publicstringPaymentMethod
11 {
12 get
13 {
14 returnthis.paymentMethod;
15 }
16 }
17
18
19 privatestringcreditCardNo;
20 publicstringCreditCardNo
21 {
22 get
23 {
24 returnthis.creditCardNo;
25 }
26 }
27
28
29 privatestringcardholderName;
30 publicstringCardholderName
31 {
32 get
33 {
34 returnthis.cardholderName;
35 }
36 }
37
38 privateDateTimeexpirationDate;
39 publicDateTimeExpirationDate
40 {
41 get
42 {
43 returnthis.expirationDate;
44 }
45 }
46
47
48 publicValidateCreditCardFormEventArgs(stringpaymentmenthod,stringcreditcardno,
49 stringcardholdername,DateTimeexpirationdate)
50 {
51 this.paymentMethod=paymentmenthod;
52 this.creditCardNo=creditcardno;
53 this.cardholderName=cardholdername;
54 this.expirationDate=expirationdate;
55 }
56 }
57}
58
2.声明一个委托。
1usingSystem;
2usingSystem.Collections.Generic;
3usingSystem.Text;
4
5namespaceCreditCardForm
6{
7 publicdelegatevoidValidateCreditCardFormEventHandler(objectsender,ValidateCreditCardFormEventArgsargs);
8}
9
3.定义事件
1 publiceventValidateCreditCardFormEventHandlerValidateCreditCardForm;
4.通事件发生后,通知其他对象的方法
1
2//这个方法是受保护的虚方法
3protectedvoidOnValidateCreditCardForm(ValidateCreditCardFormEventArgsargs)
4 {
5 if(ValidateCreditCardForm!=null)
6 handler(this,args);
7 }
这样几个步骤之后,控件的事件就写完了。大家试试! 有问题,我们下篇接着说!
今天写到这里,希望大家反馈信息,听听大家的想法!
前一篇文章只是简单的说了下事件,但是大家应该方法,在ASP.NET自定义控件中只是简单那么定义事件是行不通。如果大家开发的是WinForm中的事件,之前的定义可能没有什么大的问题,只是在效率方法欠考虑而且,还是可以运行的。
下面我们就回到ASP.NET中的事件。
大家也许看了我们之前定义的事件,确实,事件一般是那么定义的,但是那样定义事件后的,运行起来的效率不搞,因为那样定义事件后,编译器在编译事件代码的时候,会自动的为我们加入很多多线程安全的代码,就是说,虽然我们只是定义几行代码,大但是编译器为我们做了很多额外的事情,当然,这样代码的运行的效率可想而知。
在很多的时候,我们自定义控件的事件不是需要考虑多线程安全等问题的,所我们就要改变代码,使其运行的更加好,我们就采用下面的方法:显示的申明事件:
1
2//其实其实一个辅助的变量,用来做Hashtable中的”键“
3privatestaticobjectValidateCreditCardFormKey=newobject();
4 publiceventValidateCreditCardFormEventHandlerValidateCreditCardForm
5 {
6 add
7 {
8 Events.AddHandler(ValidateCreditCardFormKey,value);
9 }
10 remove
11 {
12 Events.RemoveHandler(ValidateCreditCardFormKey,value);
13 }
14 }
15
16
17 protectedvoidOnValidateCreditCardForm(ValidateCreditCardFormEventArgsargs)
18 {
19 ValidateCreditCardFormEventHandlerhandler=Events[ValidateCreditCardFormKey]
20 asValidateCreditCardFormEventHandler;
21 if(handler!=null)
22 handler(this,args);
23 }
下面我们就回到ASP.NET中的事件。
大家也许看了我们之前定义的事件,确实,事件一般是那么定义的,但是那样定义事件后的,运行起来的效率不搞,因为那样定义事件后,编译器在编译事件代码的时候,会自动的为我们加入很多多线程安全的代码,就是说,虽然我们只是定义几行代码,大但是编译器为我们做了很多额外的事情,当然,这样代码的运行的效率可想而知。
在很多的时候,我们自定义控件的事件不是需要考虑多线程安全等问题的,所我们就要改变代码,使其运行的更加好,我们就采用下面的方法:显示的申明事件:
1
2//其实其实一个辅助的变量,用来做Hashtable中的”键“
3privatestaticobjectValidateCreditCardFormKey=newobject();
4 publiceventValidateCreditCardFormEventHandlerValidateCreditCardForm
5 {
6 add
7 {
8 Events.AddHandler(ValidateCreditCardFormKey,value);
9 }
10 remove
11 {
12 Events.RemoveHandler(ValidateCreditCardFormKey,value);
13 }
14 }
15
16
17 protectedvoidOnValidateCreditCardForm(ValidateCreditCardFormEventArgsargs)
18 {
19 ValidateCreditCardFormEventHandlerhandler=Events[ValidateCreditCardFormKey]
20 asValidateCreditCardFormEventHandler;
21 if(handler!=null)
22 handler(this,args);
23 }
注意:其实就我们之前定义的事件的代码而言,编译器在在编译我们的代码的时候,也是编译成了上面的形式而且还额外的加上了一些安全的控制代码,这里,我们现在不要编译器生成,而是我们自己写出来,效率就高了。
还有就是:如果一个事件在事件列表(是一个hashtable)已经注册了,当页面上有两个相同我们自定义控件,我的控件的事件也只是在注册一次,效率也高了。
到这里一个事件就定义好了。现在做的事情就是要触发事件。即,点击“提交”按钮,就触发。我们先了理解一下流程:
点击“提交”,整个页面就向服务器提交了,之后就开始了页面的生命周期。
1.对页面进行解析,将原来页面中的源,如<asp:....></asp>这样的标记解析成相应的html代码,当把页面解析完之后,页面在服务器就是html的样式了。(我这里说的很粗略,没有必要说的那么详细)。
2.解析后的页面就开始检查,刚才是哪个控件引发的服务器回传,即,是点击了哪个按钮后,整个页面向服务器提交的,我们这里就是那个“提交”按钮。
3.解析后的页面检查“提交”按钮的name是否和控件(CreditCardForm)的name相同,如果相同。再检查控件 CreditCardForm实现了IPostBackEventHandler接口,如果实现了,就引发我们之前定义的事件。
这样,我们的控件就和真正的服务器控件没有两样了。(注意:上面的第3点:我们要按钮的name和CreditCardForm的name一样,这里的 name我们无法用自己手动来设置他们的一样,因为CreditCardForm的名字是有页面来设置的,页面将其设置为:this.UniqueID,所以我们只能将按钮的名字设置为this.UniqueID,这样就可以了),所以我们要重写CreditCardForm5的一些属性:
还有就是:如果一个事件在事件列表(是一个hashtable)已经注册了,当页面上有两个相同我们自定义控件,我的控件的事件也只是在注册一次,效率也高了。
到这里一个事件就定义好了。现在做的事情就是要触发事件。即,点击“提交”按钮,就触发。我们先了理解一下流程:
点击“提交”,整个页面就向服务器提交了,之后就开始了页面的生命周期。
1.对页面进行解析,将原来页面中的源,如<asp:....></asp>这样的标记解析成相应的html代码,当把页面解析完之后,页面在服务器就是html的样式了。(我这里说的很粗略,没有必要说的那么详细)。
2.解析后的页面就开始检查,刚才是哪个控件引发的服务器回传,即,是点击了哪个按钮后,整个页面向服务器提交的,我们这里就是那个“提交”按钮。
3.解析后的页面检查“提交”按钮的name是否和控件(CreditCardForm)的name相同,如果相同。再检查控件 CreditCardForm实现了IPostBackEventHandler接口,如果实现了,就引发我们之前定义的事件。
这样,我们的控件就和真正的服务器控件没有两样了。(注意:上面的第3点:我们要按钮的name和CreditCardForm的name一样,这里的 name我们无法用自己手动来设置他们的一样,因为CreditCardForm的名字是有页面来设置的,页面将其设置为:this.UniqueID,所以我们只能将按钮的名字设置为this.UniqueID,这样就可以了),所以我们要重写CreditCardForm5的一些属性:
1 protectedoverridestringSubmitButtonName
2 {
3 get
4 {
5 returnthis.UniqueID;
6 }
7 }
还有,每一次页面提交给服务器后,解析页面的this.UniqueID都不一样。而且,如果在页面中同时有两个CreditCardForm,我们也要保证两个控件的其他控件,如输入框等等的name也不一样,所以要分别重写name。
1protectedoverridestringPaymentMethodListName
2 {
3 get
4 {
5 returnthis.UniqueID+":PaymentMethod";
6 }
7 }
8
9 protectedoverridestringCreditCardNoTextName
10 {
11 get
12 {
13 returnthis.UniqueID+":CreditCardNo";
14 }
15 }
16
17 protectedoverridestringCardholderNameTextName
18 {
19 get
20 {
21 returnthis.UniqueID+":CardholderName";
22 }
23 }
24
25 protectedoverridestringMonthListName
26 {
27 get
28 {
29 returnthis.UniqueID+":Month";
30 }
31 }
32
33 protectedoverridestringYearListName
34 {
35 get
36 {
37 returnthis.UniqueID+":Year";
38 }
39 }
2 {
3 get
4 {
5 returnthis.UniqueID;
6 }
7 }
还有,每一次页面提交给服务器后,解析页面的this.UniqueID都不一样。而且,如果在页面中同时有两个CreditCardForm,我们也要保证两个控件的其他控件,如输入框等等的name也不一样,所以要分别重写name。
1protectedoverridestringPaymentMethodListName
2 {
3 get
4 {
5 returnthis.UniqueID+":PaymentMethod";
6 }
7 }
8
9 protectedoverridestringCreditCardNoTextName
10 {
11 get
12 {
13 returnthis.UniqueID+":CreditCardNo";
14 }
15 }
16
17 protectedoverridestringCardholderNameTextName
18 {
19 get
20 {
21 returnthis.UniqueID+":CardholderName";
22 }
23 }
24
25 protectedoverridestringMonthListName
26 {
27 get
28 {
29 returnthis.UniqueID+":Month";
30 }
31 }
32
33 protectedoverridestringYearListName
34 {
35 get
36 {
37 returnthis.UniqueID+":Year";
38 }
39 }
这里以后,下面我们就只要实现IPostBackEventHandler接口,就可以调用我们的事件了,实现IPostBackEventHandler接口,其实只有一个方法。而且也很简单,代码:
1
2
3//大家看看我们只是将之前的事件通知代码移到了这里。
4voidIPostBackEventHandler.RaisePostBackEvent(stringargs)
5 {
6 ValidateCreditCardFormEventArgsve=newValidateCreditCardFormEventArgs(
7 PaymentMethodText,CreditCardNoText,CardholderNameText,ExpirationDateText);
8
9 OnValidateCreditCardForm(ve);
10 }
这样以后,我们的控件就可以引发服务器回传了,即,当你点击“提交”按钮时,我们的浏览器的状态栏下面就有刷新的进度条了。
注意,还有一个问题啊,我们确实能够使得我们的控件向服务器提交信息,但是服务器怎么来得到我们的提交的信息呢?
并不是我们把信息向服务器提交后,就什么都不管了,然后服务器就”很听话的“进行验证。不是这样的,起码我们还要告诉服务器,我们提交了哪些要被验证的信息。
那么服务器这样接受到我们的信息,,很简单,只要实现一个接口就可以了--IPostBackDataHandler。
接口有两个方法,第一个就是LoadPostData方法,就是来获取我们的信息,并且判断我们这次提交的信息和上次有变化没有。
上面的方法返回一个布尔的值,如果返回true,就自动的调用下一个方法RaisePostDataChangedEvent,大家可以根据方法的英文看到他们的作用。
这里我们只是讲下LoadPostData方法,方法的完成写法是这样的:
1
2
3//大家看看我们只是将之前的事件通知代码移到了这里。
4voidIPostBackEventHandler.RaisePostBackEvent(stringargs)
5 {
6 ValidateCreditCardFormEventArgsve=newValidateCreditCardFormEventArgs(
7 PaymentMethodText,CreditCardNoText,CardholderNameText,ExpirationDateText);
8
9 OnValidateCreditCardForm(ve);
10 }
这样以后,我们的控件就可以引发服务器回传了,即,当你点击“提交”按钮时,我们的浏览器的状态栏下面就有刷新的进度条了。
注意,还有一个问题啊,我们确实能够使得我们的控件向服务器提交信息,但是服务器怎么来得到我们的提交的信息呢?
并不是我们把信息向服务器提交后,就什么都不管了,然后服务器就”很听话的“进行验证。不是这样的,起码我们还要告诉服务器,我们提交了哪些要被验证的信息。
那么服务器这样接受到我们的信息,,很简单,只要实现一个接口就可以了--IPostBackDataHandler。
接口有两个方法,第一个就是LoadPostData方法,就是来获取我们的信息,并且判断我们这次提交的信息和上次有变化没有。
上面的方法返回一个布尔的值,如果返回true,就自动的调用下一个方法RaisePostDataChangedEvent,大家可以根据方法的英文看到他们的作用。
这里我们只是讲下LoadPostData方法,方法的完成写法是这样的:
1boolLoadPostData(stringpostDataKey,NameValueCollectionvalues)
2{
3
4}
看见方法不要害怕,方法的参数,前一个参数,我们不要管,只要看看后面的参数就可以了。
我们的信息的提交,都是在相应的输入框,下拉框中写好了,传给服务器的,其实是以:键值对,传了的.
键:就是我们输入框等的名字,name
值:就是输入的值。
其实NameValueCollection就是一个哈希表,来存放键值对的。
我们之前的所有输入的信息被包含成了一个NameValueCollection传到服务器,然后服务器就通过对应的“键”(name)来获取值,然后验证。
代码如下:
1 boolIPostBackDataHandler.LoadPostData(stringpostDataKey,NameValueCollectionvalues)
2 {
3 stringpaymentMethod=values[PaymentMethodListName]=="0"?"Master":"Visa";
4 if(paymentMethod!=PaymentMethodText)
5 {
6 PaymentMethod=paymentMethod;
7 hasPaymentMethodChanged=true;
8 }
9
10 stringcreditCardNo=values[CreditCardNoTextName];
11 if(creditCardNo!=CreditCardNoText)
12 {
13 CreditCardNoText=creditCardNo;
14 hasCreditCardNoChanged=true;
15 }
16
17 stringcardholderName=values[CardholderNameTextName];
18 if(cardholderName!=CardholderNameText)
19 {
20 CardholderNameText=cardholderName;
21 hasCardholderNameChanged=true;
22 }
23
24 intmonth=int.Parse(values[MonthListName]);
25 intyear=int.Parse(values[YearListName]);
26 DateTimeexpirationDate=newDateTime(year,month,10);
27 if(expirationDate!=ExpirationDateText)
28 {
29 ExpirationDateText=expirationDate;
30 hasExpirationDateChanged=true;
31 }
32
33
34 if(!string.IsNullOrEmpty(values[SubmitButtonName]))
35 Page.RegisterRequiresRaiseEvent(this);
36
37 returnhasExpirationDateChanged||
38 hasCreditCardNoChanged||
39 hasPaymentMethodChanged||
40 hasCardholderNameChanged;
41
42 }
2{
3
4}
看见方法不要害怕,方法的参数,前一个参数,我们不要管,只要看看后面的参数就可以了。
我们的信息的提交,都是在相应的输入框,下拉框中写好了,传给服务器的,其实是以:键值对,传了的.
键:就是我们输入框等的名字,name
值:就是输入的值。
其实NameValueCollection就是一个哈希表,来存放键值对的。
我们之前的所有输入的信息被包含成了一个NameValueCollection传到服务器,然后服务器就通过对应的“键”(name)来获取值,然后验证。
代码如下:
1 boolIPostBackDataHandler.LoadPostData(stringpostDataKey,NameValueCollectionvalues)
2 {
3 stringpaymentMethod=values[PaymentMethodListName]=="0"?"Master":"Visa";
4 if(paymentMethod!=PaymentMethodText)
5 {
6 PaymentMethod=paymentMethod;
7 hasPaymentMethodChanged=true;
8 }
9
10 stringcreditCardNo=values[CreditCardNoTextName];
11 if(creditCardNo!=CreditCardNoText)
12 {
13 CreditCardNoText=creditCardNo;
14 hasCreditCardNoChanged=true;
15 }
16
17 stringcardholderName=values[CardholderNameTextName];
18 if(cardholderName!=CardholderNameText)
19 {
20 CardholderNameText=cardholderName;
21 hasCardholderNameChanged=true;
22 }
23
24 intmonth=int.Parse(values[MonthListName]);
25 intyear=int.Parse(values[YearListName]);
26 DateTimeexpirationDate=newDateTime(year,month,10);
27 if(expirationDate!=ExpirationDateText)
28 {
29 ExpirationDateText=expirationDate;
30 hasExpirationDateChanged=true;
31 }
32
33
34 if(!string.IsNullOrEmpty(values[SubmitButtonName]))
35 Page.RegisterRequiresRaiseEvent(this);
36
37 returnhasExpirationDateChanged||
38 hasCreditCardNoChanged||
39 hasPaymentMethodChanged||
40 hasCardholderNameChanged;
41
42 }
这样,我们整个控件就写完了,不知道大家懂了没:有问题回复!完整代码如下:
1usingSystem;
2usingSystem.Collections.Generic;
3usingSystem.Text;
4usingSystem.Web;
5usingSystem.Web.UI;
6usingSystem.Web.UI.WebControls;
7usingSystem.Collections;
8
9usingSystem.Collections.Specialized;
10
11namespaceCreditCardForm
12{
13 publicclassCreditCardForm6:CreditCardForm5,IPostBackEventHandler,IPostBackDataHandler
14 {
15 #regionoverridename
16 protectedoverridestringPaymentMethodListName
17 {
18 get
19 {
20 returnthis.UniqueID+":PaymentMethod";
21 }
22 }
23
24 protectedoverridestringCreditCardNoTextName
25 {
26 get
27 {
28 returnthis.UniqueID+":CreditCardNo";
29 }
30 }
31
32 protectedoverridestringCardholderNameTextName
33 {
34 get
35 {
36 returnthis.UniqueID+":CardholderName";
37 }
38 }
39
40 protectedoverridestringMonthListName
41 {
42 get
43 {
44 returnthis.UniqueID+":Month";
45 }
46 }
47
48 protectedoverridestringYearListName
49 {
50 get
51 {
52 returnthis.UniqueID+":Year";
53 }
54 }
55
56 protectedoverridestringSubmitButtonName
57 {
58 get
59 {
60 returnthis.UniqueID;
61 }
62 }
63 #endregion
64 #regionprorerty
65
66 publicstringPaymentMethodText
67 {
68 get
69 {
70 returnViewState["PaymentMethod"]!=null?(string)ViewState["PaymentMethod"]:string.Empty;
71 }
72 set
73 {
74 ViewState["PaymentMethod"]=value;
75 }
76 }
77
78
79 publicstringCreditCardNoText
80 {
81 get
82 {
83 returnViewState["CreditCardNo"]!=null?(string)ViewState["CreditCardNo"]:string.Empty;
84 }
85 set
86 {
87 ViewState["CreditCardNo"]=value;
88 }
89 }
90
91 publicstringCardholderNameText
92 {
93 get
94 {
95 returnViewState["CardholderName"]!=null?(string)ViewState["CardholderName"]:string.Empty;
96 }
97 set
98 {
99 ViewState["CardholderName"]=value;
100 }
101 }
102
103 publicDateTimeExpirationDateText
104 {
105 get
106 {
107 returnViewState["ExpirationDate"]!=null?(DateTime)ViewState["ExpirationDate"]:DateTime.Now;
108 }
109 set
110 {
111 ViewState["ExpirationDate"]=value;
112 }
113 }
114
115
116 #endregion
117
118 #regionevents
119 privatestaticobjectValidateCreditCardFormKey=newobject();
120 publiceventValidateCreditCardFormEventHandlerValidateCreditCardForm
121 {
122 add
123 {
124 Events.AddHandler(ValidateCreditCardFormKey,value);
125 }
126 remove
127 {
128 Events.RemoveHandler(ValidateCreditCardFormKey,value);
129 }
130 }
131
132
133 protectedvoidOnValidateCreditCardForm(ValidateCreditCardFormEventArgsargs)
134 {
135 ValidateCreditCardFormEventHandlerhandler=Events[ValidateCreditCardFormKey]
136 asValidateCreditCardFormEventHandler;
137 if(handler!=null)
138 handler(this,args);
139 }
140
141 #endregion
142 voidIPostBackEventHandler.RaisePostBackEvent(stringargs)
143 {
144 ValidateCreditCardFormEventArgsve=newValidateCreditCardFormEventArgs(
145 PaymentMethodText,CreditCardNoText,CardholderNameText,ExpirationDateText);
146
147 OnValidateCreditCardForm(ve);
148 }
149
150 privateboolhasPaymentMethodChanged;
151 privateboolhasCreditCardNoChanged;
152 privateboolhasCardholderNameChanged;
153 privateboolhasExpirationDateChanged;
154
155 boolIPostBackDataHandler.LoadPostData(stringpostDataKey,NameValueCollectionvalues)
156 {
157 stringpaymentMethod=values[PaymentMethodListName]=="0"?"Master":"Visa";
158 if(paymentMethod!=PaymentMethodText)
159 {
160 PaymentMethod=paymentMethod;
161 hasPaymentMethodChanged=true;
162 }
163
164 stringcreditCardNo=values[CreditCardNoTextName];
165 if(creditCardNo!=CreditCardNoText)
166 {
167 CreditCardNoText=creditCardNo;
168 hasCreditCardNoChanged=true;
169 }
170
171 stringcardholderName=values[CardholderNameTextName];
172 if(cardholderName!=CardholderNameText)
173 {
174 CardholderNameText=cardholderName;
175 hasCardholderNameChanged=true;
176 }
177
178 intmonth=int.Parse(values[MonthListName]);
179 intyear=int.Parse(values[YearListName]);
180 DateTimeexpirationDate=newDateTime(year,month,10);
181 if(expirationDate!=ExpirationDateText)
182 {
183 ExpirationDateText=expirationDate;
184 hasExpirationDateChanged=true;
185 }
186
187
188 if(!string.IsNullOrEmpty(values[SubmitButtonName]))
189 Page.RegisterRequiresRaiseEvent(this);
190
191 returnhasExpirationDateChanged||
192 hasCreditCardNoChanged||
193 hasPaymentMethodChanged||
194 hasCardholderNameChanged;
195
196 }
197
198 voidIPostBackDataHandler.RaisePostDataChangedEvent()
199 {
200 boolhasChanged;
201 hasChanged=hasCardholderNameChanged||
202 hasCreditCardNoChanged||
203 hasPaymentMethodChanged||
204 hasExpirationDateChanged;
205
206 if(hasChanged)
207 {
208
209 ValidateCreditCardFormEventArgsargs=newValidateCreditCardFormEventArgs(
210 PaymentMethod,CreditCardNoText,CardholderNameText,ExpirationDateText);
211
212 OnValidateCreditCardForm(args);
213 }
214 }
215
216 }
217}
218
1usingSystem;
2usingSystem.Collections.Generic;
3usingSystem.Text;
4usingSystem.Web;
5usingSystem.Web.UI;
6usingSystem.Web.UI.WebControls;
7usingSystem.Collections;
8
9usingSystem.Collections.Specialized;
10
11namespaceCreditCardForm
12{
13 publicclassCreditCardForm6:CreditCardForm5,IPostBackEventHandler,IPostBackDataHandler
14 {
15 #regionoverridename
16 protectedoverridestringPaymentMethodListName
17 {
18 get
19 {
20 returnthis.UniqueID+":PaymentMethod";
21 }
22 }
23
24 protectedoverridestringCreditCardNoTextName
25 {
26 get
27 {
28 returnthis.UniqueID+":CreditCardNo";
29 }
30 }
31
32 protectedoverridestringCardholderNameTextName
33 {
34 get
35 {
36 returnthis.UniqueID+":CardholderName";
37 }
38 }
39
40 protectedoverridestringMonthListName
41 {
42 get
43 {
44 returnthis.UniqueID+":Month";
45 }
46 }
47
48 protectedoverridestringYearListName
49 {
50 get
51 {
52 returnthis.UniqueID+":Year";
53 }
54 }
55
56 protectedoverridestringSubmitButtonName
57 {
58 get
59 {
60 returnthis.UniqueID;
61 }
62 }
63 #endregion
64 #regionprorerty
65
66 publicstringPaymentMethodText
67 {
68 get
69 {
70 returnViewState["PaymentMethod"]!=null?(string)ViewState["PaymentMethod"]:string.Empty;
71 }
72 set
73 {
74 ViewState["PaymentMethod"]=value;
75 }
76 }
77
78
79 publicstringCreditCardNoText
80 {
81 get
82 {
83 returnViewState["CreditCardNo"]!=null?(string)ViewState["CreditCardNo"]:string.Empty;
84 }
85 set
86 {
87 ViewState["CreditCardNo"]=value;
88 }
89 }
90
91 publicstringCardholderNameText
92 {
93 get
94 {
95 returnViewState["CardholderName"]!=null?(string)ViewState["CardholderName"]:string.Empty;
96 }
97 set
98 {
99 ViewState["CardholderName"]=value;
100 }
101 }
102
103 publicDateTimeExpirationDateText
104 {
105 get
106 {
107 returnViewState["ExpirationDate"]!=null?(DateTime)ViewState["ExpirationDate"]:DateTime.Now;
108 }
109 set
110 {
111 ViewState["ExpirationDate"]=value;
112 }
113 }
114
115
116 #endregion
117
118 #regionevents
119 privatestaticobjectValidateCreditCardFormKey=newobject();
120 publiceventValidateCreditCardFormEventHandlerValidateCreditCardForm
121 {
122 add
123 {
124 Events.AddHandler(ValidateCreditCardFormKey,value);
125 }
126 remove
127 {
128 Events.RemoveHandler(ValidateCreditCardFormKey,value);
129 }
130 }
131
132
133 protectedvoidOnValidateCreditCardForm(ValidateCreditCardFormEventArgsargs)
134 {
135 ValidateCreditCardFormEventHandlerhandler=Events[ValidateCreditCardFormKey]
136 asValidateCreditCardFormEventHandler;
137 if(handler!=null)
138 handler(this,args);
139 }
140
141 #endregion
142 voidIPostBackEventHandler.RaisePostBackEvent(stringargs)
143 {
144 ValidateCreditCardFormEventArgsve=newValidateCreditCardFormEventArgs(
145 PaymentMethodText,CreditCardNoText,CardholderNameText,ExpirationDateText);
146
147 OnValidateCreditCardForm(ve);
148 }
149
150 privateboolhasPaymentMethodChanged;
151 privateboolhasCreditCardNoChanged;
152 privateboolhasCardholderNameChanged;
153 privateboolhasExpirationDateChanged;
154
155 boolIPostBackDataHandler.LoadPostData(stringpostDataKey,NameValueCollectionvalues)
156 {
157 stringpaymentMethod=values[PaymentMethodListName]=="0"?"Master":"Visa";
158 if(paymentMethod!=PaymentMethodText)
159 {
160 PaymentMethod=paymentMethod;
161 hasPaymentMethodChanged=true;
162 }
163
164 stringcreditCardNo=values[CreditCardNoTextName];
165 if(creditCardNo!=CreditCardNoText)
166 {
167 CreditCardNoText=creditCardNo;
168 hasCreditCardNoChanged=true;
169 }
170
171 stringcardholderName=values[CardholderNameTextName];
172 if(cardholderName!=CardholderNameText)
173 {
174 CardholderNameText=cardholderName;
175 hasCardholderNameChanged=true;
176 }
177
178 intmonth=int.Parse(values[MonthListName]);
179 intyear=int.Parse(values[YearListName]);
180 DateTimeexpirationDate=newDateTime(year,month,10);
181 if(expirationDate!=ExpirationDateText)
182 {
183 ExpirationDateText=expirationDate;
184 hasExpirationDateChanged=true;
185 }
186
187
188 if(!string.IsNullOrEmpty(values[SubmitButtonName]))
189 Page.RegisterRequiresRaiseEvent(this);
190
191 returnhasExpirationDateChanged||
192 hasCreditCardNoChanged||
193 hasPaymentMethodChanged||
194 hasCardholderNameChanged;
195
196 }
197
198 voidIPostBackDataHandler.RaisePostDataChangedEvent()
199 {
200 boolhasChanged;
201 hasChanged=hasCardholderNameChanged||
202 hasCreditCardNoChanged||
203 hasPaymentMethodChanged||
204 hasExpirationDateChanged;
205
206 if(hasChanged)
207 {
208
209 ValidateCreditCardFormEventArgsargs=newValidateCreditCardFormEventArgs(
210 PaymentMethod,CreditCardNoText,CardholderNameText,ExpirationDateText);
211
212 OnValidateCreditCardForm(args);
213 }
214 }
215
216 }
217}
218