Pregunta

He implementado mi ListFieldIterator a cambiar la forma en que los controles de campo prestados.Me gustaría cambiar el comportamiento de la forma en función del tipo de contenido elemento, pero cualquier intento de determinar ContentTypeId del código devuelve un resultado erróneo.

ListFieldIterator.ListItem.ContentTypeId

SPContext.Current.ListItem.ContentTypeId

siempre regreso

0x00C2208B8CE6E1422CADC1C521EAB2a68b

(que no es válido identificador del tipo de contenido)

Hay una propiedad LoadContentTypes en SPContext clase, pero la configuración es CIERTO para SPContext.Current o FieldIterator.ItemContext no hace ninguna diferencia.

¿Qué estoy haciendo mal?

¿Fue útil?

Solución

Además del método de determinación de ContentType en la costumbre de ListFieldIterator de cadena de consulta, ItemContext contiene la propiedad ContentType.Pero esta propiedad es interna y por lo tanto no podían ser usadas directamente en la costumbre de ListFieldIterator aplicación.

A continuación se presenta contenedor para retriving ContentType basado en la propiedad correspondiente para SPContext (Reflexión es utilizado aquí)

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

El uso de CurrentContentType de propiedad, tipo de contenido puede ser determinado en personalizado ListFieldIterator aplicación.

Otros consejos

La única manera que he encontrado para determinar el tipo de contenido en este caso es el de analizar HTTP cadena de consulta:

new SPContentTypeId(this.Context.Request.QueryString["ContentTypeId"])
Licenciado bajo: CC-BY-SA con atribución
scroll top