Frage

Ich habe meinen ListFieldIterator implementiert, um die Art und Weise zu ändern, wie Feldsteuerelemente gerendert werden.Ich möchte das Verhalten der Form von Form vom Artikelinhaltstyp ändern, aber alle Versuche, ContentTyped aus dem Code zu bestimmen, gibt ein falsches Ergebnis zurück.

ListFieldIterator.ListItem.ContentTypeId

SPContext.Current.ListItem.ContentTypeId

kommen immer wieder zurück

0x00C2208B8CE6E1422CADC1C521EAB2A68B

(was eine ungültige Inhaltstyp-ID ist)

Es gibt eine Eigenschaft LoadContentTypes in der SPContext-Klasse, die jedoch auf TRUE gesetzt ist SPContext.Current oder FieldIterator.ItemContext macht keinen Unterschied.

Was mache ich falsch?

War es hilfreich?

Lösung

Zusätzlich zur Methode mit Bestimmung Inhaltstyp im Brauch ListFieldIterator aus der Abfragezeichenfolge, ItemContext enthält Eigentum Inhaltstyp.Diese Eigenschaft ist jedoch intern und konnte daher nicht direkt in Custom verwendet werden ListFieldIterator Implementierung.

Nachfolgend finden Sie einen Wrapper zum Abrufen Inhaltstyp basierend auf der entsprechenden Eigenschaft für SPContext (Hier wird Reflexion verwendet)

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

Benutzen CurrentContentType Eigenschaft, Inhaltstyp kann benutzerdefiniert festgelegt werden ListFieldIterator Implementierung.

Andere Tipps

Die einzige Möglichkeit, den Inhaltstyp in diesem Fall zu bestimmen, besteht meiner Meinung nach darin, die HTTP-Abfragezeichenfolge zu analysieren:

new SPContentTypeId(this.Context.Request.QueryString["ContentTypeId"])
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit sharepoint.stackexchange
scroll top