Подтвердить что ты не робот

Ошибка анализатора iFrame после обновления до .NET 4.5

Недавно мы обновили все наши проекты WebForms до .NET 4.5 и столкнулись с проблемой парсера при загрузке страниц с элементом iFrame. Мы исправили это преобразованием iFrame от HtmlGenericControl до HtmlIframe. Это исправило все ошибки парсера, когда мы запускаем наш код локально.

При развертывании приложения появляется следующее сообщение об ошибке:

Сообщение об ошибке Parser: базовый класс включает поле 'frame', но его тип (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

4b9b3361

Ответ 1

Мы смогли исправить проблему с преобразованием

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

to

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

Ответ 2

Основная проблема заключается в несовместимости объекта, сгенерированного из серверного элемента управления IFRAME веб-форм компилятором ASP.NET (который компилирует файлы ASPX и ASCX в код С# или 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. Ошибка, которую вы видите, выглядит так:

Базовый класс включает поле frame, но его тип (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. Ошибка, которую вы видите, выглядит так:

Базовый класс включает поле frame, но его тип (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.

Ответ 3

Вам нужно добавить следующий тег:

<asp:HtmlIframe>

и в конструкторе измените тип управления на:

System.Web.UI.HtmlControls.HtmlIframe

Добавьте в Web.config следующее:

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

Это должно исправить.

Ответ 4

Убедитесь, что у вас есть следующие настройки в файле конфигурации. Также убедитесь, что он там после публикации.

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

Надеюсь, что это поможет.

Ответ 5

Вы можете сохранить свой HTML-элемент как <iframe> и просто изменить свой файл .designer, чтобы изменить тип на

System.Web.UI.HtmlControls.HtmlIframe

Ответ 6

Далее (или в виде комбинации ответов здесь).

Я не верю, что для фактического изменения тегов от 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.

Ответ 7

Я также столкнулся с этой проблемой, но просто я удалил этот UserControl и добавил новый userControl с тем же именем, после чего моя проблема была исправлена ​​.....

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

Ответ 8

Посмотрите в файл конструктора и замените Htmliframe для HtmlGenericControl в элементе управления, который имеет проблемы.

Ответ 9

Мое решение состояло в том, чтобы просто переименовать IFrame и перестроить, и файл дизайнера будет соответствующим образом обновлен с правильными ссылками.

Ответ 10

Начиная с .NET 4.5 Microsoft решила изменить iframe с HtmlGenericControl на свой собственный элемент управления, HtmlIframe. так что вы должны изменить

System.Web.UI.HtmlControls.HtmlGenericControls to System.Web.UI.HtmlControls.HtmlIframe