自定义字段类型属性呈现

上次修改时间: 2010年4月3日

适用范围: SharePoint Foundation 2010

字段类型的许多特征都是一致的;例如,所有字段类型都具有一个可以设置为 true 或 false 的属性,可以利用该属性对这些字段类型进行排序。但自定义字段类型通常具有一些只对预期用途和该字段类型的基础数据类型有意义的变量属性。例如,一个正则表达式字段类型的值是与指定的正则表达式匹配的字符串。需要匹配的特定正则表达式将随栏的不同而不同。为此,当用户在"新建网站栏"、"更改网站栏"、"创建栏"和"更改栏"页面上创建基于此字段类型的栏时,用户必须设置此属性。

呈现字段属性

您可以通过创作 .ascx 页充当字段编辑器用户控件来定义字段类型属性的呈现。这使您可以在 ASCX 控件的代码隐藏页中编写自定义数据处理逻辑,如复杂的计算逻辑、从数据源查找值以及自定义数据验证。

通过将"FieldEditorUserControl"用作字段类型定义 XML 文件中的 Field 元素(字段类型)的 Name 属性,可指定该控件用作字段编辑器控件。例如:

<Field Name="FieldEditorUserControl">
/_controltemplates/LookupFieldEditor.ascx
</Field>

您只能为特定的字段类型类指定一个字段编辑器控件。如果从指定了字段编辑器用户控件的字段类型类(如 Lookup 或 User 字段类型)继承,并且在字段类型定义中指定了另一个字段编辑器控件,则同样不会继承父类的字段编辑器用户控件。若要继承父字段类型的字段编辑器控件,则必须在字段类型定义中不包含 <Field Name="FieldEditorUserControl"> 元素,或必须指定父字段类型定义所指定的同一控件。

备注

除了两种例外情况之外,编辑器控件不可用于在"新建网站栏"、"更改网站栏"、"创建栏"和"更改栏"页上呈现 SharePoint Foundation 附带的字段类型的变量属性(下一节中所述的旧字段类型属性呈现方法也不可用于此目的),而是呈现页面文件(如 FldNew.aspx)自身上的硬编码标记。(Lookup 和 User 字段类型属于例外,二者均使用编辑器控件。)因此,自定义字段类无法继承有关呈现它继承自的 SharePoint Foundation 类中的字段类型的属性的任何信息(如果它继承自 Lookup 或 User 字段类型,则有可能实现此目的)。例如,如果从 SPFieldText 类派生一个自定义字段类型,则新的自定义字段类型不会继承文本框(位于"新建网站栏"、"更改网站栏"、"创建栏"和"更改栏"页面上,栏创建者或栏编辑者在其中指定最大字段长度)的呈现信息。若要呈现任何父类的字段类型属性,则必须使用字段编辑器用户控件来指定您自己的呈现。

除了自定义字段类型类是否可以从其父类继承呈现信息这一问题之外,还存在另一个问题,即编辑器控件本身是否可以从内置编辑器控件之一继承。答案是"不能"。字段编辑器控件类无法从 LookupFieldEditor 或 UserFieldEditor 控件类继承。它们是 SharePoint Foundation 附带的仅有的两个字段编辑器控件,不能通过代码访问。

使用 PropertySchema 元素呈现字段属性

在早期版本的 SharePoint Foundation 中,开发人员并不总是使用 ASCX 编辑器控件来呈现字段类型属性。本节介绍另一种方法。提供此信息只是为了帮助您调试最初针对早期版本的 SharePoint Foundation 平台开发并且使用旧方法呈现字段类型属性的自定义字段类型。尽管此方法仍然有效并且旧自定义字段可以正确呈现,但是我们建议不要对任何新自定义字段项目使用此方法。使用此方法可能会降低自定义字段类型与 SharePoint Foundation 的未来版本兼容的可能性。

当您创建 fldtypes*.xml 文件中的字段类型定义时,可以将每个字段类型属性定义为 PropertySchema 元素内的 Field 元素。如果您在 PropertySchema 元素中定义字段类型属性,则 SharePoint Foundation 会自动基于该架构呈现这些属性。

PropertySchema 元素包含一个 Fields 元素,而后者又包含您要定义的每个字段类型属性的 Field 元素。可以在每个 Field 元素中使用标准协作应用程序标记语言 (CAML)。有关自定义字段类型的详细信息,请参阅如何:创建自定义字段类型定义

这种方法会限制您只能使用在使用 CAML 时才可用的呈现选项。您不能为字段类型属性指定自定义处理或验证处理。为此,此方法最适用于不需要复杂的处理或验证逻辑的简单字段类型属性。

备注

需要记住一点,我们谈论的不是最终用户为特定列表的特定列表项中的字段提供的特定值验证,而是"新建网站栏"、"更改网站栏"、"创建栏"和"更改栏"页面上设置的字段(即)的属性。很少需要对栏创建者或栏编辑者可能用来设置字段属性的值进行验证。

请参阅

概念

自定义字段类型

如何:创建自定义字段类

如何:创建自定义字段类型定义

字段类型属性的编辑器控件