ASP.NET控件开发(WebPart开发)之类型转换器

题外话:
WebPart也是一种ASP.NET服务器控件,因为它也是从WebControl继承的。

之前在学习ASP.NET控件开发的过程中,学到类型转换器的时候就感觉进行不下去了。
感觉类型转换比较麻烦,看代码看得我头晕。
---
现在在工作中,开发WebPart时,需要使用到一个List<string>集合来存储属性,然而在html页面中或aspx页面中展现时,却是以
字符串的形式存储。当我在SharePoint Designer 中编辑一个该webPart所在的页面后,对应的集合属性值就无法保存到List<string>,
也就是缺少一种string<->List<string>的转换。导致该webpart无法正常展现。
解决方法就是使用类型转换器进行两者之间的转换。
----
具体对于类型转换器的介绍就不再说明,直接上代码:
  1 None.gif  [TypeConverter( typeof (SwapPictureListConverter))]
  2 None.gif     public   sealed   class  SwapPictureList < T > :IEnumerable
  3 ExpandedBlockStart.gifContractedBlock.gif     dot.gif {
  4InBlock.gif        private List<T> container = new List<T>();
  5InBlock.gif        public void Add(T value)
  6ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
  7InBlock.gif            container.Add(value);
  8ExpandedSubBlockEnd.gif        }

  9InBlock.gif        public int Count
 10ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
 11InBlock.gif            get
 12ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
 13InBlock.gif                return container.Count;
 14ExpandedSubBlockEnd.gif            }

 15ExpandedSubBlockEnd.gif        }

 16InBlock.gif        public void Clear()
 17ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
 18InBlock.gif            container.Clear();
 19ExpandedSubBlockEnd.gif        }

 20InBlock.gif        public IEnumerator GetEnumerator()
 21ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
 22InBlock.gif            return container.GetEnumerator();
 23ExpandedSubBlockEnd.gif        }

 24ExpandedBlockEnd.gif    }

 25 None.gif     public   class  SwapPictureListConverter : TypeConverter
 26 ExpandedBlockStart.gifContractedBlock.gif     dot.gif {
 27InBlock.gif        public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
 28ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
 29InBlock.gif            if (sourceType == typeof(string))
 30InBlock.gif                return true;
 31InBlock.gif            return base.CanConvertFrom(context, sourceType);
 32ExpandedSubBlockEnd.gif        }

 33InBlock.gif        public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)
 34ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
 35InBlock.gif            if (destinationType == typeof(string))
 36InBlock.gif                return true;
 37InBlock.gif            return base.CanConvertTo(context, destinationType);
 38ExpandedSubBlockEnd.gif        }

 39InBlock.gif        public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType)
 40ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
 41InBlock.gif            if (value != null)
 42ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
 43InBlock.gif                if (!(value is SwapPictureList<string>))
 44ExpandedSubBlockStart.gifContractedSubBlock.gif                dot.gif{
 45InBlock.gif                    throw new ArgumentException(
 46InBlock.gif                        "Invalid SwapPictureList""value");
 47ExpandedSubBlockEnd.gif                }

 48ExpandedSubBlockEnd.gif            }

 49InBlock.gif
 50InBlock.gif            if (destinationType == typeof(string))
 51ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
 52InBlock.gif                if (value == null)
 53ExpandedSubBlockStart.gifContractedSubBlock.gif                dot.gif{
 54InBlock.gif                    return String.Empty;
 55ExpandedSubBlockEnd.gif                }

 56InBlock.gif                TypeConverter stringConverter = TypeDescriptor.GetConverter(typeof(string));
 57InBlock.gif                SwapPictureList<string> tempList = (SwapPictureList<string>)value;
 58InBlock.gif                if (tempList.Count <= 0)
 59InBlock.gif                    return string.Empty;
 60InBlock.gif
 61InBlock.gif                string[] tempStrs = new string[tempList.Count];
 62InBlock.gif                int i = 0;
 63InBlock.gif                foreach (string tempStr in tempList)
 64ExpandedSubBlockStart.gifContractedSubBlock.gif                dot.gif{
 65InBlock.gif                    tempStrs[i] = stringConverter.ConvertToString(context, culture, tempStr);
 66InBlock.gif                    i++;
 67ExpandedSubBlockEnd.gif                }

 68InBlock.gif
 69InBlock.gif                return String.Join(culture.TextInfo.ListSeparator, tempStrs);
 70ExpandedSubBlockEnd.gif            }

 71InBlock.gif
 72InBlock.gif
 73InBlock.gif            return base.ConvertTo(context, culture, value, destinationType);
 74ExpandedSubBlockEnd.gif        }

 75InBlock.gif        public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value)
 76ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
 77InBlock.gif            if (value == null)
 78ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
 79InBlock.gif                return new SwapPictureList<string>();
 80ExpandedSubBlockEnd.gif            }

 81InBlock.gif
 82InBlock.gif            if (value is string)
 83ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
 84InBlock.gif                string s = (string)value;
 85InBlock.gif                if (s.Length == 0)
 86ExpandedSubBlockStart.gifContractedSubBlock.gif                dot.gif{
 87InBlock.gif                    return new SwapPictureList<string>();
 88ExpandedSubBlockEnd.gif                }

 89InBlock.gif
 90InBlock.gif                string[] parts = s.Split(culture.TextInfo.ListSeparator[0]);
 91InBlock.gif
 92InBlock.gif                if (parts.Length <= 0)
 93ExpandedSubBlockStart.gifContractedSubBlock.gif                dot.gif{
 94InBlock.gif                    throw new ArgumentException("Invalid SwapPictureList""value");
 95ExpandedSubBlockEnd.gif                }

 96InBlock.gif                //返回指定类型转换器
 97InBlock.gif                TypeConverter stringConverter = TypeDescriptor.GetConverter(typeof(string));
 98InBlock.gif                SwapPictureList<string> tempList = new SwapPictureList<string>();
 99InBlock.gif                for (int i = 0; i < parts.Length; i++)
100ExpandedSubBlockStart.gifContractedSubBlock.gif                dot.gif{
101InBlock.gif                    tempList.Add((string)stringConverter.ConvertFromString(context, culture, parts[i]));
102ExpandedSubBlockEnd.gif                }

103InBlock.gif                return tempList;
104ExpandedSubBlockEnd.gif            }

105InBlock.gif            return base.ConvertFrom(context, culture, value);
106ExpandedBlockEnd.gif        }

通过SwapPictureListConverter就可以在SwapPictureList和String之间进行转换了。
这个类型转换是属于值(类型)转换的一种。
而类型转换器还有属性转换等等。
-----
以上代码记录在此,仅作备忘。

转载于:https://www.cnblogs.com/McJeremy/archive/2009/01/07/1371248.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
大学生就业服务平台管理系统按照操作主体分为管理员和用户。管理员的功能包括学生档案管理、字典管理、试卷管理、试卷选题管理、试题表管理、考试记录表管理、答题详情表管理、错题表管理、法律法规管理、法律法规收藏管理、法律法规留言管理、就业分析管理、论坛管理、企业管理、简历管理、老师管理、简历投递管理、新闻资讯管理、新闻资讯收藏管理、新闻资讯留言管理、学生信息管理、宣传管理、学生管理、职位招聘管理、职位收藏管理、招聘咨询管理、管理员管理。用户的功能等。该系统采用了Mysql数据库,Java语言,Spring Boot框架等技术进行编程实现。 大学生就业服务平台管理系统可以提高大学生就业服务平台信息管理问题的解决效率,优化大学生就业服务平台信息处理流程,保证大学生就业服务平台信息数据的安全,它是一个非常可靠,非常安全的应用程序。 管理员权限操作的功能包括管理新闻信息,管理大学生就业服务平台信息,包括考试管理,培训管理,投递管理,薪资管理等,可以管理新闻信息。 考试管理界面,管理员在考试管理界面中可以对界面中显示,可以对考试信息的考试状态进行查看,可以添加新的考试信息等。投递管理界面,管理员在投递管理界面中查看投递种类信息,投递描述信息,新增投递信息等。新闻信息管理界面,管理员在新闻信息管理界面中新增新闻信息,可以删除新闻信息。新闻信息类型管理界面,管理员在新闻信息类型管理界面查看新闻信息的工作状态,可以对新闻信息的数据进行导出,可以添加新新闻信息的信息,可以编辑新闻信息信息,删除新闻信息信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值