it-swarm.dev

خطأ محلل iFrame بعد الترقية إلى .NET 4.5

لقد قمنا مؤخرًا بترقية جميع مشاريع WebForms الخاصة بنا إلى .NET 4.5 ، واجهنا مشكلة محلل عند تحميل الصفحات بعنصر iFrame. لقد صححنا هذا عن طريق تحويل iFrame من HtmlGenericControl إلى HtmlIframe. لقد صحح هذا جميع أخطاء المحلل اللغوي عندما نقوم بتشغيل الرمز الخاص بنا محليًا.

عندما ننشر التطبيق ، نحصل على رسالة الخطأ التالية:

رسالة خطأ المحلل اللغوي: تتضمن الفئة الأساسية الحقل "إطار" ، ولكن نوعه (System.Web.UI.HtmlControls.HtmlIframe) غير متوافق مع نوع عنصر التحكم (System.Web.UI.HtmlControls.HtmlGenericControl). **

عندما أقوم بنشر الكود القديم مع HtmlGenericControl ، يختفي الخطأ موضحًا أنه على الرغم من أننا قمنا بتثبيت .NET 4.5 ، ما زال الخادم يستخدم إصدارًا أقدم؟

لقد حاولت إزالة .NET وإعادة تثبيته مع التأكد من تسجيل asp مع IIS.

Windows 2008 R2 مع IIS 7.5 و .NET 4.5

65
gambisk

كنا قادرين على حل مشكلة تحويل

<iframe id="iframe" runat="server" />

إلى

<asp:HtmlIframe id="iframe" runat="server" />
20
gambisk

المشكلة الأساسية هي عدم التوافق بين الكائن الذي تم إنشاؤه من تحكم خادم IFRAME Web Forms الخاص بك بواسطة برنامج التحويل البرمجي ASP.NET (الذي يجمع ملفات ASPX و ASCX إلى C # أو VB الكود) ونوع المتغير المقابل لـ هذا التحكم في رمز نماذج الويب الخاصة بك وراء. سيتم تحليل عنصر تحكم خادم IFRAME (<iframe id="frame" runat="server" />) كعنصر تحكم من نوع معين. في ASP.NET 4 ، سيكون عنصر تحكم خادم IFRAME عنصر تحكم HtmlGenericControl. في ASP.NET 4.5 ، سيكون عنصر تحكم خادم IFRAME عنصر تحكم HtmlIframe.

يمكن إصلاح المشكلة عن طريق التأكد من أن سمة targetFramework على عنصر التحويل البرمجي في ملف web.config الخاص بك تتوافق مع خاصية Target Framework الخاصة بمشروعك وأن المتغير المتوافق مع عنصر تحكم خادم IFRAME يطابق نوع التحكم في ASP.NET سوف مترجم توليد.

سيقوم مشروع ASP.NET 4 الذي تم تحويله إلى .NET Framework 4.5 في Visual Studio 2013 بتعديل ملف web.config الخاص بالمشروع بحيث تحتوي سمة targetFramework الخاصة بعنصر التحويل البرمجي على قيمة "4.5" (<compilation targetFramework="4.5"/>). يؤدي هذا برنامج التحويل البرمجي ASP.NET للتعامل مع عنصر تحكم خادم IFRAME كعنصر تحكم HtmlIframe. يمكن أن يسبب هذا مشكلة إذا كان رمز نماذج ويب خلف متغير عنصر التحكم لا يزال HtmlGenericControl. الخطأ الذي تراه هو كالتالي:

تتضمن الفئة الأساسية الحقل "إطار" ، ولكن نوعه (System.Web.UI.HtmlControls.HtmlGenericControl) غير متوافق مع نوع عنصر التحكم (System.Web.UI.HtmlControls.HtmlIframe).

يتمثل حل الخطأ السابق في تحديث نوع متغير التحكم في الخادم الذي يتوافق مع عنصر تحكم خادم IFRAME. يمكنك القيام بذلك عن طريق إعادة حفظ ملف HTML لنماذج الويب والذي سيؤدي إلى إعادة إنشاء ملف المصمم. بقدر ما أستطيع أن أرى (في Visual Studio 2013 على الأقل) تغيير معرف عنصر التحكم ليس من الضروري. إذا كان متغير التحكم في الخادم في الكود الموجود خلف الملف ، فيجب تحديثه يدويًا.

مشروع ASP.NET 4.5 حيث يكون الكود خلف المتغير هو HtmlIframe سيواجه مشكلة مماثلة ولكنها مختلفة إذا كانت سمة targetFramework لعنصر التحويل البرمجي في ملف web.config لها قيمة "4.0" (<compilation targetFramework="4.0"/>). يؤدي هذا برنامج التحويل البرمجي ASP.NET للتعامل مع عنصر تحكم خادم IFRAME كعنصر تحكم HtmlGenericControl. الخطأ الذي تراه هو كالتالي:

تتضمن الفئة الأساسية الحقل "إطار" ، ولكن نوعه (System.Web.UI.HtmlControls.HtmlIframe) غير متوافق مع نوع عنصر التحكم (System.Web.UI.HtmlControls.HtmlGenericControl).

تتمثل طريقة إصلاح الخطأ السابق في التأكد من توافق إعدادات ترجمة web.config مع السمة Target Framework للمشروع. في هذه الحالة ، يجب أن تحتوي سمة targetFramework الخاصة بعنصر التحويل البرمجي في web.config على قيمة "4.5".

<compilation targetFramework="4.5"/>


ملاحظة: تعيين سمة targetFramework لعنصر httpRuntime إلى 4.5 سيكون له أيضًا تأثير على تعيين سمة targetFramework لعنصر التحويل البرمجي إلى 4.5. راجع https://blogs.msdn.Microsoft.com/webdev/2012/11/19/all-about-httpruntime-targetframework/ لمزيد من المعلومات.

ملاحظة 2: لا توجد علامة <asp:HtmlIframe>. تسجيل بادئة العلامة "asp" في مساحة الاسم System.Web.UI.HtmlControls ليس شيئًا مطلوبًا لاستخدام عنصر تحكم خادم IFRAME.

80
David Johnston

تحتاج إلى إضافة العلامة التالية:

<asp:HtmlIframe>

وفي المصمم ، قم بتغيير نوع التحكم إلى:

System.Web.UI.HtmlControls.HtmlIframe

أضف ما يلي في Web.config:

<controls>
 <add tagPrefix="asp" namespace="System.Web.UI.HtmlControls" Assembly="System.Web"/>
</controls>

هذا ينبغي اصلاحها.

33
Panoj

تحقق من أن لديك الإعدادات التالية في ملف التكوين الخاص بك. تأكد أيضًا من وجوده بعد النشر.

<system.web>
    <httpRuntime targetFramework="4.5" />
    <compilation debug="true" targetFramework="4.5"/>
    ...
</system.web>

نأمل أن يساعد.

6
Dmitry Antonenko

يمكنك الاحتفاظ بعنصر HTML كـ <iframe> ، وتعديل ملف .designer الخاص بك ببساطة لتغيير النوع إلى

System.Web.UI.HtmlControls.HtmlIframe
4
p.campbell

مزيد من (أو في مزيج من الإجابات هنا).

لا أعتقد أنه من الضروري تغيير العلامات فعليًا من iframe إلى asp:HtmlIFrame إذا كان لديك مرجع إلى System.Web.UI.HtmlControls المحدّث.

لقد قمت بتحديث web.config لإزالة إصدارات محددة من بادئة العلامة واستبدالها بـ:

<add tagPrefix="asp" namespace="System.Web.UI.HtmlControls" Assembly="System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>

قم بتنظيف المشروع وإعادة بنائه ومن ثم يقوم بتجديد كافة علامات المصمم الخاصة بي بإخراج HtmlIFrame الصحيح.

2
dougajmcdonald

كنت قد واجهت هذه المشكلة أيضًا ، لكني ببساطة قمت بحذف UserControl ans وأضاف userControl جديدًا بنفس الاسم ثم تم إصلاح مشكلتي.

  <iframe id="logPanel" runat="server" scrolling="auto" src="">
1
Amit Sharma

ابحث في ملف المصمم واستبدل Htmliframe لـ HtmlGenericControl في عنصر التحكم الذي لديه مشاكل.

0
ovamendocino

من .NET 4.5 ، قررت Microsoft تغيير iframe من HtmlGenericControl إلى عنصر التحكم الخاص به ، HtmlIframe. لذلك عليك أن تغير

System.Web.UI.HtmlControls.HtmlGenericControls to System.Web.UI.HtmlControls.HtmlIframe
0
Ayush joshi

كان حلي هو مجرد إعادة تسمية IFrame وإعادة الإنشاء وسيتم تحديث ملف المصمم وفقًا للمراجع الصحيحة.

0
De Wet Ellis