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

来源:互联网 发布:mysqlfront导入数据库 编辑:程序博客网 时间:2024/04/29 17:22

      使用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“,匹配时需要注意不要丢掉了这个数字标识符。

原创粉丝点击