asp.net - net - iniciar iis windows server 2008
Error del analizador iFrame después de actualizar a.NET 4.5 (9)
Recientemente hemos actualizado todos nuestros proyectos de WebForms a .NET 4.5, y encontramos un problema de analizador al cargar páginas con un elemento iFrame
. Hemos corregido esto convirtiendo el iFrame
de HtmlGenericControl
a HtmlIframe
. Esto ha corregido todos los errores del analizador cuando ejecutamos nuestro código localmente.
Cuando implementamos la aplicación, recibimos el siguiente mensaje de error:
Mensaje de error del analizador: la clase base incluye el campo ''marco'', pero su tipo (System.Web.UI.HtmlControls.HtmlIframe) no es compatible con el tipo de control (System.Web.UI.HtmlControls.HtmlGenericControl). **
Cuando implemento el código antiguo con HtmlGenericControl
el error desaparece, lo que sugiere que, a pesar de que hemos instalado .NET 4.5, ¿el servidor sigue usando una versión anterior?
He intentado quitar y reinstalar .NET asegurándome de registrar asp con IIS.
Windows 2008 R2 con IIS 7.5 y .NET 4.5
Además (o en una combinación de las respuestas aquí).
No creo que sea necesario cambiar realmente las etiquetas de iframe
a asp:HtmlIFrame
si tiene la referencia al System.Web.UI.HtmlControls
actualizado.
Actualicé mi web.config para eliminar versiones específicas del prefijo de etiqueta y reemplazarlo con:
<add tagPrefix="asp" namespace="System.Web.UI.HtmlControls" assembly="System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
Limpie y reconstruya el proyecto y eso regenera todas las etiquetas de diseñador para mí con la salida HtmlIFrame
correcta.
Busque en el archivo del diseñador y reemplace Htmliframe por HtmlGenericControl en el control que tiene problemas.
Compruebe que tiene la siguiente configuración en su archivo de configuración. También asegúrese de que está allí después de la publicación.
<system.web>
<httpRuntime targetFramework="4.5" />
<compilation debug="true" targetFramework="4.5"/>
...
</system.web>
Espero que sea de ayuda.
El problema básico es una incompatibilidad entre el objeto generado desde el control del servidor IFRAME de Web Forms por el compilador ASP.NET (que compila los archivos ASPX y ASCX en código C # o VB) y el tipo de variable correspondiente a ese control en sus formularios web. código detrás. Un control de servidor IFRAME ( <iframe id="frame" runat="server" />
) se analizará como un control de un tipo particular. En ASP.NET 4, un control de servidor IFRAME será un control HtmlGenericControl. En ASP.NET 4.5, un control de servidor IFRAME será un control HtmlIframe.
El problema puede solucionarse asegurándose de que el atributo targetFramework en el elemento de compilación en su archivo web.config esté de acuerdo con la propiedad Marco de destino de su proyecto y que la variable correspondiente a su control de servidor IFRAME coincida con el tipo de control de ASP.NET compilador generará.
Un proyecto ASP.NET 4 que se haya convertido a .NET Framework 4.5 en Visual Studio 2013 modificará el archivo web.config del proyecto para que el atributo targetFramework del elemento de compilación tenga un valor de "4.5" ( <compilation targetFramework="4.5"/>
). Esto hace que el compilador ASP.NET trate el control del servidor IFRAME como un control HtmlIframe. Esto puede causar un problema si el código de formularios web detrás de la variable de control sigue siendo un HtmlGenericControl. El error que ves es así:
La clase base incluye el campo ''marco'', pero su tipo (System.Web.UI.HtmlControls.HtmlGenericControl) no es compatible con el tipo de control (System.Web.UI.HtmlControls.HtmlIframe).
La solución al error anterior es actualizar el tipo de la variable de control del servidor que corresponde al control del servidor IFRAME. Puede hacerlo volviendo a guardar el archivo HTML de Web Forms, lo que hará que el archivo del diseñador se regenere. Por lo que puedo ver (al menos en Visual Studio 2013) no es necesario cambiar el ID de control. Si la variable de control del servidor está en el código detrás del archivo, debe actualizarse manualmente.
Un proyecto ASP.NET 4.5 donde la variable detrás del código es un HtmlIframe experimentará un problema similar pero diferente si el atributo targetFramework del elemento de compilación en el archivo web.config tiene un valor de "4.0" ( <compilation targetFramework="4.0"/>
). Esto hace que el compilador ASP.NET trate el control del servidor IFRAME como un control HtmlGenericControl. El error que ves es así:
La clase base incluye el campo ''marco'', pero su tipo (System.Web.UI.HtmlControls.HtmlIframe) no es compatible con el tipo de control (System.Web.UI.HtmlControls.HtmlGenericControl).
La forma de corregir el error anterior es asegurarse de que la configuración de la compilación web.config coincida con el atributo Marco de destino de su proyecto. En este caso, el atributo targetFramework del elemento de compilación en web.config debe tener un valor de "4.5".
<compilation targetFramework="4.5"/>
Nota: establecer el atributo targetFramework del elemento httpRuntime en 4.5 también tendrá el efecto de establecer el atributo targetFramework del elemento de compilación en 4.5. Consulte https://blogs.msdn.microsoft.com/webdev/2012/11/19/all-about-httpruntime-targetframework/ para obtener más información.
Nota 2: No hay una etiqueta <asp:HtmlIframe>
. Registrar el prefijo de etiqueta "asp" en el espacio de nombres System.Web.UI.HtmlControls no es algo que se requiera para usar un control de servidor IFRAME.
Mi solución fue simplemente cambiar el nombre de IFrame y reconstruir y el archivo del diseñador se actualizará en consecuencia con las referencias correctas.
Necesitas agregar la siguiente etiqueta:
<asp:HtmlIframe>
y en el diseñador, cambie el tipo de control a:
System.Web.UI.HtmlControls.HtmlIframe
Agregue lo siguiente en el Web.config:
<controls>
<add tagPrefix="asp" namespace="System.Web.UI.HtmlControls" assembly="System.Web"/>
</controls>
Esto debería arreglarlo.
Pudimos arreglar el problema convirtiendo el
<iframe id="iframe" runat="server" />
a
<asp:HtmlIframe id="iframe" runat="server" />
Puede mantener su elemento HTML como <iframe>
, y simplemente modificar su archivo .designer para cambiar el tipo a
System.Web.UI.HtmlControls.HtmlIframe
También tuve este problema, pero simplemente eliminé este UserControl y agregué un nuevo UserControl con el mismo nombre y luego mi problema se solucionó ...
<iframe id="logPanel" runat="server" scrolling="auto" src="">