لماذا يرتبط عنصر التحكم FileUpload بعنصر القائمة الحالي في قائمة EditForm المخصصة؟

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

سؤال

لقد قمت بكتابة نموذج تعديل مخصص لقائمة مما يعني أنني أفقد بعض الإمكانات الجاهزة مثل المرفقات لأنها كانت جزءًا من النموذج الجاهز.الطريقة التي قمت بها بتنفيذ النموذج هي كتابة جزء ويب مرئي مخصص باستخدام كود ASP.NET وC# خلفه ثم أثناء النشر، أقوم بإخفاء جزء ويب التحرير الموجود في صفحة EditForm.aspx ثم قم بإضافة جزء الويب الخاص بي إليه.

الطريقة التي قمت بتطوير النموذج بها هي الفصل المناسب بين الاهتمامات حيث لا يعرف النموذج الخاص بي أي شيء عن SharePoint ويقوم فقط بتمرير كائن بيانات إلى كائن datamanager الذي يقوم بعد ذلك بكتابة البيانات إلى SharePoint.

المشكلة تأتي مع نموذج المرفقات الذي كتبته.ما وجدته هو ذلك SPContext.Current.ListItem.Attachments يحتوي على الفور على الملف في FileUpload السيطرة على آخر مرة أخرى.لم أضطر إلى كتابة أي تعليمات برمجية لحدوث ذلك - ما عليك سوى تشغيل إعادة النشر أثناء تحديد ملف في عنصر التحكم.

في معظم الحالات، يمكنني فقط تجاهل حقيقة حدوث ذلك وأن كل شيء يعمل بشكل جيد لأنني لا أقوم فعليًا بتحديث هذا المثيل لعنصر القائمة.ولكن في بعض الحالات المتطورة، مثل تحميل ملف يوجد به مرفق يحمل نفس الاسم بالفعل، ينفجر النموذج دون لمس الكود الخاص بي.

لقد وجدت أيضًا أن هناك AttachmentsControl في ال SPContext.Current.FormContext.FieldControlCollection وإزالة هذا في كل Page_Init حدث UserControl لا يساعد في حل المشكلة على الإطلاق.

السبب وراء رغبتي في وضع النموذج الخاص بي في سياق عنصر القائمة هو أن جميع أشرطة الأدوات / الشريط / قوائم السياق / إلخ.لا يزال يرتبط بشكل صحيح إلى النموذج.يمكنني إعادة التوجيه من نموذج التعديل إلى صفحة خارج السياق تحتوي على جزء الويب الخاص بي، لكن هذا يبدو مخترقًا وغير ضروري (ناهيك عن الترميز السيئ فقط).

هل لدى أي شخص أي فكرة عن سبب حدوث هذا السلوك وكيف يمكنني التغلب عليه؟يبدو أن التصميم السيئ للغاية لأي نموذج قائمة يقوم تلقائيًا باختطاف عنصر تحكم لاستخدامه الخاص مثل هذا.أشعر أن SharePoint يجب أن يكون له تحكمه الخاص ويترك عنصر تحكم ASP.NET بمفرده ولكن يبدو أن هذا ليس هو الحال.

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

المحلول

في نموذج قائمة قياسي إذا تمت إضافة مرفق يحمل نفس الاسم عدة مرات.إذا كان سيتم تخزين العنصر، فسيطرح النموذج استثناءً، حيث تمت إضافة أحد المرفقات عدة مرات ويمنع من إضافة العنصر.

في حالتك، يمكنك تجاوز هذا الاستثناء، مما يؤدي إلى عدم توفر أي مرفقات عند محاولة تخزين عنصر القائمة.لتجنب هذا السلوك، يتعين عليك التحقق يدويًا من إضافة المرفق عدة مرات وإلا فسوف تفشل دائمًا.

تحتاج إلى إزالة جزء ويب NewForm الافتراضي بدلاً من إخفائه.ثم لن يتم رفع الاستثناء ويمكنك الحصول على المرفقات.

نصائح أخرى

إذا قمت بإرفاق معالج حدث إلى حدث itemAdding، فهل يتم تشغيله في ظروف الخطأ؟قد تتمكن من استخدام ذلك لتشغيل بعض التعليمات البرمجية المخصصة للتعامل مع الحدث، أو ربما مجرد منع رسالة خطأ نظام النظام وتوفير رسالة أفضل خاصة بك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى sharepoint.stackexchange
scroll top