سؤال

أواجه مشكلة في التحويل إلى رمز Excel الذي أجده. أنا أعمل على مشروع موقع إلكتروني في .NET 4.0 ، وقد أنشأت فصلًا لهذا الغرض يقوم بما يلي (استنادًا إلى http://mattberseth.com/blog/2007/04/export_gridview_to_excel_1.html ):

Genacodicetagpre

أتصل بهذا الفصل من عنصر تحكم مستخدم يحتوي على زر يضاف إلى GridView المعروض على الصفحة. يعمل هذا كما هو متوقع - انقر فوق الزر ، يتم تقديمك مع خيار التنزيل إما لفتح أو حفظ جدول بيانات Excel الناتج الذي يحتوي على البيانات من GridView.

ومع ذلك ، عندما أسمي هذا من زر ارتباط داخل GridView مختلف ، أود إنشاء عرض شبكة ديناميكي لاحتواء البيانات وتصديرها. عندما أفعل ذلك ، أحصل على ThreadAbortException من Response.End استدعاء في الفصل.

السؤال 1: لماذا لا أحصل على ThreadAbortException عند استدعاء نفس الرمز من داخل عنصر تحكم مستخدم؟ هل تحصل عناصر التحكم على خيوطها الخاصة أو نوعًا آخر من السياق؟

دفعني البحث عن الخطأ الذي أحصل عليه عند حدوث ThreadAbortException إلى محاولة استبداله بـ ApplicationInstance.CompleteRequest (). عندما أفعل ذلك ، لم أعد أحصل على ThreadAbortException ، لكن هذا يكسر التحكم المستخدم سابقًا - بدلاً من جدول بيانات Excel الناتج الذي يحتوي على البيانات من الشبكة ، فإنه يحتوي على HTML من الصفحة المحتوية ، وعلى أي حال يكون من السهل بما فيه الكفاية منعه هذا الخطأ بمصيد فارغ. ومع ذلك ، فإنه لا يصلح المكالمة المباشرة مع GridView التي تم إنشاؤها ديناميكيًا ، حيث يعرض هذا الرمز خطأ جافا سكريبت: "تعذر تحليل الرسالة المستلمة من الخادم."

أود أن أفهم بالضبط ما يجري هنا ، لكنني على وشك أن أحتاج إلى نتائج بغض النظر عن الفهم. جميع الأساليب الأخرى التي جربتها (datagrid بدلاً من GridView ، إلخ) تواجه نفس المشكلات ، وهي في الأساس هي نفسها عندما يتعلق الأمر بـ "تولي المسؤولية" الاستجابة الحالية واستخدام كاتب النص و htmlwriter لتقديم البيانات في استجابة مع نوع المحتوى اكسل. ونظرًا لأن هذا يعمل بشكل واضح في سياق عنصر تحكم مستخدم ، فأنا في طريقي لمعرفة سبب عدم نجاحه عند الاتصال به مباشرة ...

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

المحلول 3

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

http://forums.asp.net/t/1392827.aspx

http://forums.aspfree.com/net-development-11/gridview-footer-template-button-in-updatepanel-not-posting-back-236087.html

يوضح هذا الموضوع ThreadAbortException وخطأ "... تعذر تحليله".كانت إضافة هذا إلى OnPreRender من ImageButton هو الحل: Genacodicetagpre

نصائح أخرى

حاول بدلاً من ذلك: HttpApplication.CompleteRequest () حسب: http://www.c6software.com/codesolutions/dotnet/threadabortexception.aspx

يناقشون لغة html الإضافية التي تم حذفها

استخدم هذا Genacodicetagpre

بدلاً من Gridview1 ، يمكنك استخدام div

Genacodicetagpre

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

كان لدي نفس الخطأ وتم حله عندما قمت بإعادة النشر الكامل.

أتمنى أن يساعد هذا شخصًا ما.

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