如何在FormControl(例如FieldIterator)中确定item ContentType?
-
10-12-2019 - |
题
我已经实现了我的ListFieldIterator来更改字段控件的呈现方式。我想根据项目内容类型更改表单的行为, 但是任何从代码中确定ContentTypeId的尝试都会返回错误的结果。
ListFieldIterator.ListItem.ContentTypeId
SPContext.Current.ListItem.ContentTypeId
总是回来
0x00C2208B8CE6E1422CADC1C521EAB2a68b
(这是无效的内容类型id)
SPContext类中有一个属性LoadContentTypes,但将其设置为TRUE SPContext.Current
或 FieldIterator.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"])