كيفية تحديد كونتنتيب البند في فورمكونترول (فيلديتيراتور على سبيل المثال)?

sharepoint.stackexchange https://sharepoint.stackexchange.com//questions/57298

سؤال

لقد نفذت ليستفيلديتيراتور لتغيير طريقة الضوابط الميدانية المقدمة.أرغب في تغيير سلوك النموذج اعتمادا على نوع محتوى العنصر, ولكن أي محاولات لتحديد كونتنتيبيد من التعليمات البرمجية ترجع نتيجة خاطئة.

ListFieldIterator.ListItem.ContentTypeId

SPContext.Current.ListItem.ContentTypeId

دائما العودة

0 * 00ج2208ب8ج6ج1422ج1ج521ج2ج68ب

(وهو معرف نوع المحتوى غير صالح)

هناك لوادكونتينتيبس الملكية في فئة سبكونتيكست ، ولكن وضع ذلك صحيحا ل SPContext.Current أو FieldIterator.ItemContext لا فرق.

ماذا أفعل خطأ?

هل كانت مفيدة؟

المحلول

بالإضافة إلى الطريقة مع تحديد نوع المحتوى في العرف ليستفيلديتيراتور من سلسلة الاستعلام, إيتمكونتيكست يحتوي على خاصية نوع المحتوى.لكن هذه الخاصية داخلية وبالتالي لا يمكن استخدامها مباشرة في العرف ليستفيلديتيراتور التنفيذ.

ويرد أدناه المجمع لاسترجاع نوع المحتوى بناء على الممتلكات المقابلة ل سبكونتيكست (يستخدم الانعكاس هنا)

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

باستخدام نوع المحتوى الحالي الملكية ، يمكن تحديد نوع المحتوى في العرف ليستفيلديتيراتور التنفيذ.

نصائح أخرى

الطريقة الوحيدة التي وجدتها لتحديد نوع المحتوى في هذه الحالة هي تحليل سلسلة استعلام هتب:

new SPContentTypeId(this.Context.Request.QueryString["ContentTypeId"])
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى sharepoint.stackexchange
scroll top