我已经实现了我的ListFieldIterator来更改字段控件的呈现方式。我想根据项目内容类型更改表单的行为, 但是任何从代码中确定ContentTypeId的尝试都会返回错误的结果。

ListFieldIterator.ListItem.ContentTypeId

SPContext.Current.ListItem.ContentTypeId

总是回来

0x00C2208B8CE6E1422CADC1C521EAB2a68b

(这是无效的内容类型id)

SPContext类中有一个属性LoadContentTypes,但将其设置为TRUE SPContext.CurrentFieldIterator.ItemContext 没什么区别。

我做错了什么?

有帮助吗?

解决方案

除了与确定的方法 [医]类型 在海关 ListFieldIterator查看原文查看译文 从查询字符串, 项目文本 包含属性 [医]类型.但是这个属性是内部的,因此不能直接在自定义中使用 ListFieldIterator查看原文查看译文 执行。

下面是用于重试的包装器 [医]类型 基于相应的属性 N.文本 (这里使用反射)

        private SPContentType CurrentContentType
        {
            get {
                var ct = typeof(SPContext).GetProperty("ContentType", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(ItemContext, null) as SPContentType;
                return ct;
            }
        }

使用 当前类型 属性,内容类型可以在自定义中确定 ListFieldIterator查看原文查看译文 执行。

其他提示

我发现在这种情况下确定内容类型的唯一方法是分析HTTP查询字符串:

new SPContentTypeId(this.Context.Request.QueryString["ContentTypeId"])
许可以下: CC-BY-SA归因
scroll top