WebPart也是一种ASP.NET服务器控件,因为它也是从WebControl继承的。
之前在学习ASP.NET控件开发的过程中,学到类型转换器的时候就感觉进行不下去了。
感觉类型转换比较麻烦,看代码看得我头晕。
---
现在在工作中,开发WebPart时,需要使用到一个List<string>集合来存储属性,然而在html页面中或aspx页面中展现时,却是以
字符串的形式存储。当我在SharePoint Designer 中编辑一个该webPart所在的页面后,对应的集合属性值就无法保存到List<string>,
也就是缺少一种string<->List<string>的转换。导致该webpart无法正常展现。
解决方法就是使用类型转换器进行两者之间的转换。
----
具体对于类型转换器的介绍就不再说明,直接上代码:
1
[TypeConverter(typeof(SwapPictureListConverter))]
2
public sealed class SwapPictureList<T>:IEnumerable
3
{
4
private List<T> container = new List<T>();
5
public void Add(T value)
6
{
7
container.Add(value);
8
}
9
public int Count
10
{
11
get
12
{
13
return container.Count;
14
}
15
}
16
public void Clear()
17
{
18
container.Clear();
19
}
20
public IEnumerator GetEnumerator()
21
{
22
return container.GetEnumerator();
23
}
24
}
25
public class SwapPictureListConverter : TypeConverter
26
{
27
public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
28
{
29
if (sourceType == typeof(string))
30
return true;
31
return base.CanConvertFrom(context, sourceType);
32
}
33
public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)
34
{
35
if (destinationType == typeof(string))
36
return true;
37
return base.CanConvertTo(context, destinationType);
38
}
39
public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType)
40
{
41
if (value != null)
42
{
43
if (!(value is SwapPictureList<string>))
44
{
45
throw new ArgumentException(
46
"Invalid SwapPictureList", "value");
47
}
48
}
49![](/Images/OutliningIndicators/InBlock.gif)
50
if (destinationType == typeof(string))
51
{
52
if (value == null)
53
{
54
return String.Empty;
55
}
56
TypeConverter stringConverter = TypeDescriptor.GetConverter(typeof(string));
57
SwapPictureList<string> tempList = (SwapPictureList<string>)value;
58
if (tempList.Count <= 0)
59
return string.Empty;
60![](/Images/OutliningIndicators/InBlock.gif)
61
string[] tempStrs = new string[tempList.Count];
62
int i = 0;
63
foreach (string tempStr in tempList)
64
{
65
tempStrs[i] = stringConverter.ConvertToString(context, culture, tempStr);
66
i++;
67
}
68![](/Images/OutliningIndicators/InBlock.gif)
69
return String.Join(culture.TextInfo.ListSeparator, tempStrs);
70
}
71![](/Images/OutliningIndicators/InBlock.gif)
72![](/Images/OutliningIndicators/InBlock.gif)
73
return base.ConvertTo(context, culture, value, destinationType);
74
}
75
public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value)
76
{
77
if (value == null)
78
{
79
return new SwapPictureList<string>();
80
}
81![](/Images/OutliningIndicators/InBlock.gif)
82
if (value is string)
83
{
84
string s = (string)value;
85
if (s.Length == 0)
86
{
87
return new SwapPictureList<string>();
88
}
89![](/Images/OutliningIndicators/InBlock.gif)
90
string[] parts = s.Split(culture.TextInfo.ListSeparator[0]);
91![](/Images/OutliningIndicators/InBlock.gif)
92
if (parts.Length <= 0)
93
{
94
throw new ArgumentException("Invalid SwapPictureList", "value");
95
}
96
//返回指定类型转换器
97
TypeConverter stringConverter = TypeDescriptor.GetConverter(typeof(string));
98
SwapPictureList<string> tempList = new SwapPictureList<string>();
99
for (int i = 0; i < parts.Length; i++)
100
{
101
tempList.Add((string)stringConverter.ConvertFromString(context, culture, parts[i]));
102
}
103
return tempList;
104
}
105
return base.ConvertFrom(context, culture, value);
106
}
通过SwapPictureListConverter就可以在SwapPictureList和String之间进行转换了。
这个类型转换是属于值(类型)转换的一种。
而类型转换器还有属性转换等等。
-----
以上代码记录在此,仅作备忘。
![](/Images/OutliningIndicators/None.gif)
2
![](/Images/OutliningIndicators/None.gif)
3
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
4
![](/Images/OutliningIndicators/InBlock.gif)
5
![](/Images/OutliningIndicators/InBlock.gif)
6
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
7
![](/Images/OutliningIndicators/InBlock.gif)
8
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
9
![](/Images/OutliningIndicators/InBlock.gif)
10
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
11
![](/Images/OutliningIndicators/InBlock.gif)
12
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
13
![](/Images/OutliningIndicators/InBlock.gif)
14
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
15
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
16
![](/Images/OutliningIndicators/InBlock.gif)
17
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
18
![](/Images/OutliningIndicators/InBlock.gif)
19
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
20
![](/Images/OutliningIndicators/InBlock.gif)
21
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
22
![](/Images/OutliningIndicators/InBlock.gif)
23
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
24
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
25
![](/Images/OutliningIndicators/None.gif)
26
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
27
![](/Images/OutliningIndicators/InBlock.gif)
28
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
29
![](/Images/OutliningIndicators/InBlock.gif)
30
![](/Images/OutliningIndicators/InBlock.gif)
31
![](/Images/OutliningIndicators/InBlock.gif)
32
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
33
![](/Images/OutliningIndicators/InBlock.gif)
34
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
35
![](/Images/OutliningIndicators/InBlock.gif)
36
![](/Images/OutliningIndicators/InBlock.gif)
37
![](/Images/OutliningIndicators/InBlock.gif)
38
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
39
![](/Images/OutliningIndicators/InBlock.gif)
40
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
41
![](/Images/OutliningIndicators/InBlock.gif)
42
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
43
![](/Images/OutliningIndicators/InBlock.gif)
44
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
45
![](/Images/OutliningIndicators/InBlock.gif)
46
![](/Images/OutliningIndicators/InBlock.gif)
47
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
48
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
49
![](/Images/OutliningIndicators/InBlock.gif)
50
![](/Images/OutliningIndicators/InBlock.gif)
51
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
52
![](/Images/OutliningIndicators/InBlock.gif)
53
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
54
![](/Images/OutliningIndicators/InBlock.gif)
55
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
56
![](/Images/OutliningIndicators/InBlock.gif)
57
![](/Images/OutliningIndicators/InBlock.gif)
58
![](/Images/OutliningIndicators/InBlock.gif)
59
![](/Images/OutliningIndicators/InBlock.gif)
60
![](/Images/OutliningIndicators/InBlock.gif)
61
![](/Images/OutliningIndicators/InBlock.gif)
62
![](/Images/OutliningIndicators/InBlock.gif)
63
![](/Images/OutliningIndicators/InBlock.gif)
64
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
65
![](/Images/OutliningIndicators/InBlock.gif)
66
![](/Images/OutliningIndicators/InBlock.gif)
67
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
68
![](/Images/OutliningIndicators/InBlock.gif)
69
![](/Images/OutliningIndicators/InBlock.gif)
70
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
71
![](/Images/OutliningIndicators/InBlock.gif)
72
![](/Images/OutliningIndicators/InBlock.gif)
73
![](/Images/OutliningIndicators/InBlock.gif)
74
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
75
![](/Images/OutliningIndicators/InBlock.gif)
76
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
77
![](/Images/OutliningIndicators/InBlock.gif)
78
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
79
![](/Images/OutliningIndicators/InBlock.gif)
80
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
81
![](/Images/OutliningIndicators/InBlock.gif)
82
![](/Images/OutliningIndicators/InBlock.gif)
83
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
84
![](/Images/OutliningIndicators/InBlock.gif)
85
![](/Images/OutliningIndicators/InBlock.gif)
86
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
87
![](/Images/OutliningIndicators/InBlock.gif)
88
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
89
![](/Images/OutliningIndicators/InBlock.gif)
90
![](/Images/OutliningIndicators/InBlock.gif)
91
![](/Images/OutliningIndicators/InBlock.gif)
92
![](/Images/OutliningIndicators/InBlock.gif)
93
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
94
![](/Images/OutliningIndicators/InBlock.gif)
95
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
96
![](/Images/OutliningIndicators/InBlock.gif)
97
![](/Images/OutliningIndicators/InBlock.gif)
98
![](/Images/OutliningIndicators/InBlock.gif)
99
![](/Images/OutliningIndicators/InBlock.gif)
100
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
101
![](/Images/OutliningIndicators/InBlock.gif)
102
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
103
![](/Images/OutliningIndicators/InBlock.gif)
104
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
105
![](/Images/OutliningIndicators/InBlock.gif)
106
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
通过SwapPictureListConverter就可以在SwapPictureList和String之间进行转换了。
这个类型转换是属于值(类型)转换的一种。
而类型转换器还有属性转换等等。
-----
以上代码记录在此,仅作备忘。