webcontrol使用上.docx
《webcontrol使用上.docx》由会员分享,可在线阅读,更多相关《webcontrol使用上.docx(6页珍藏版)》请在冰豆网上搜索。
![webcontrol使用上.docx](https://file1.bdocx.com/fileroot1/2023-1/29/5a4883ac-c120-4c2b-863f-44fa634c0863/5a4883ac-c120-4c2b-863f-44fa634c08631.gif)
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 }
相信这段代码大家都和熟悉。
在这段代码的作用主要显示了一个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方法就把这些职责分离了。
以后我们能就
可以独立的改变一个因素了。
大家也许奇怪:
不是说有四个职责吗,但是上面只是显示了三个方法,其实在
RenderBeginTag()方法中包含显示最外层标记样式的方法。
所以我们只要分别重写这三个方法,一个继承WebControl的自定义的控件就成了。
不要怕,方法很多,但是很简单,而
且代码我们都懂,之前差不多都讲了的。
我想把写成后的控件给大家看看,让大家看下我们本章的目标:
大家看见没有:
是不是支持的样式多了!
!
!
好了,我们来写吧:
不难哦:
)
首先看看我们要的写方法以及他们的功能:
protectedoverridevoidRender(HtmlTextWriterwriter)
{
//显示最外层包含标记开始的标记,即,显示
RenderBeginTag(writer);
//显示table标记内的内容,如
等 RenderContens(writer); //显示最外层包含标记结束标记 RenderEndTag(writer); } 现在的思路很清晰吧,首先来显示 很简单,只要如下就可以了。 1 protectedoverrideHtmlTextWriterTagTagKey 2 { 3 get 4 { 5 returnHtmlTextWriterTag.Table; 6 } 7 } 不要奇怪,因为RenderBeginTag()方法内部实际是调用了这个属性来显示的最外层的包含标记的。 好了,第一步就写完了啊! 简答吧! 下面来显示table的样式,因为我们的控件的最外层的标记是table,显示他的样式只要这样就OK了。 1 protectedoverrideStyleCreateControlStyle() 2 { 3 returnnewTableStyle(ViewState); 4 } 又写完了一部分。 。 不难吧! 接着看啊! 如果你的最外层的标记是
展开阅读全文
相关搜索
|