使用SPField的InternalName属性时的一点问题。

      使用SPField对象的InternalName匹配Item的MetaInfo中的Field时发现这样一个问题:所有中文Name的Column都无法匹配成功。后来发现只要创建出一个非英文(如使用日文)Name的Column就会无法匹配成功。这个问题的原因是由于在List中创建或引用一个非英文Name的Column时,Sharepoint会将这个Column的Internal Name自动转换为Unicode。例如创建一个名为"用户"的Column,这时查看它的Internal Name为“_x7528__x6237_”。7528和6237就是Unicode,而_x和_是标记,表示在一个_x和 _之间包含的是一个字符的Unicode。 再在这个List中创建一个Item,查看Item的MetaInfo中显示这个Column为“用户”。这是因为Sharepoint在写入到MetaInfo中时又进行了Decode将Unicode转换成了字符,所以就导致了使用非英文Name的Column的情况下,SPField的InternalName和Item的MetaInfo中的Field无法匹配的问题。如果我们想要通过SPField的InternalN正确的找到MetaInfo中对应的Column怎么办呢?这就需要对Unicode进行转换,可以使用以下方法:

char charCode = (char)UInt32.Parse(7528, System.Globalization.NumberStyles.HexNumber);

因C#中的Char类型全部都是Unicode Char,所以可以直接使用Char转换Unicode,这样就可以将Unicode先转换为字符,再进行匹配就可以成功匹配了。

       另外匹配时还要注意一个问题就是如果在List中已经存在了一个名为“用户”的Column,那么热如果再在Site Column中再创建一个名为“用户”的Column然后List引用这个Column,那么这个List中就会存在两个Name同为“用户”的Column。这时Sharepoint会自动在Column的Internal name后加一个数以来区分,数字以0开始。如:“_x7528__x6237_0”,Metainfo中为“用户0“,匹配时需要注意不要丢掉了这个数字标识符。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值