it-swarm.com.de

iFrame-Parser-Fehler nach dem Upgrade auf .NET 4.5

Wir haben kürzlich alle unsere WebForms-Projekte auf .NET 4.5 aktualisiert. Beim Laden von Seiten mit einem iFrame-Element ist ein Parser-Problem aufgetreten. Wir haben dies korrigiert, indem wir die iFrame von HtmlGenericControl in HtmlIframe konvertieren. Dies hat alle Parser-Fehler korrigiert, wenn wir unseren Code lokal ausführen.

Wenn wir die App bereitstellen, wird folgende Fehlermeldung angezeigt:

Parser-Fehlermeldung: Die Basisklasse enthält das Feld 'frame', der Typ (System.Web.UI.HtmlControls.HtmlIframe) ist jedoch nicht mit dem Steuerelementtyp (System.Web.UI.HtmlControls.HtmlGenericControl) kompatibel.

Wenn ich den alten Code mit der HtmlGenericControl bereitstelle, verschwindet der Fehler und es wird darauf hingewiesen, dass der Server trotz der Installation von .NET 4.5 noch eine ältere Version verwendet. 

Ich habe versucht, .NET zu entfernen und erneut zu installieren, um sicherzustellen, dass ASP mit IIS registriert wird. 

Windows 2008 R2 mit IIS 7.5 und .NET 4.5

63
gambisk

Wir konnten das Problem bei der Konvertierung beheben 

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

zu 

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

Das grundlegende Problem ist eine Inkompatibilität zwischen dem von Ihrem Web Forms IFRAME-Serversteuerelement generierten Objekt vom ASP.NET-Compiler (der ASPX- und ASCX-Dateien zu C # - oder VB - Code kompiliert) und dem Typ der diesem Steuerelement entsprechenden Variable in Ihrem Web Forms-Code hinter. Ein IFRAME-Serversteuerelement (<iframe id="frame" runat="server" />) wird als ein Steuerelement eines bestimmten Typs analysiert. In ASP.NET 4 ist ein IFRAME-Serversteuerelement ein HtmlGenericControl-Steuerelement. In ASP.NET 4.5 ist ein IFRAME-Serversteuerelement ein HtmlIframe-Steuerelement.

Sie können das Problem beheben, indem Sie sicherstellen, dass das targetFramework-Attribut im Kompilierungselement in Ihrer Datei web.config mit der Target Framework-Eigenschaft Ihres Projekts übereinstimmt und dass die Ihrem IFRAME-Serversteuerelement entsprechende Variable mit dem Steuerelementtyp des ASP.NET übereinstimmt Compiler wird generieren. 

Ein ASP.NET 4-Projekt, das in Visual Studio 2013 in .NET Framework 4.5 konvertiert wurde, ändert die Datei web.config des Projekts, sodass das targetFramework-Attribut des Kompilierungselements den Wert "4,5" (<compilation targetFramework="4.5"/>) hat. Dies bewirkt, dass der ASP.NET-Compiler das IFRAME-Serversteuerelement als ein HtmlIframe-Steuerelement behandelt. Dies kann zu einem Problem führen, wenn der Web Forms-Code hinter der Steuerungsvariablen immer noch ein HtmlGenericControl ist. Der Fehler, den Sie sehen, sieht so aus:

Die Basisklasse enthält das Feld 'frame', der Typ (System.Web.UI.HtmlControls.HtmlGenericControl) ist jedoch nicht mit dem Typ des Steuerelements (System.Web.UI.HtmlControls.HtmlIframe) kompatibel.

Die Lösung des vorherigen Fehlers besteht darin, den Typ der Serversteuerungsvariablen zu aktualisieren, die dem IFRAME-Serversteuerelement entspricht. Sie können dies tun, indem Sie die Web Forms-HTML-Datei erneut speichern, wodurch die Designer-Datei neu generiert wird. Soweit ich sehen kann (in Visual Studio 2013 mindestens), ist das Ändern der Steuerelement-ID nicht erforderlich. Wenn sich die Serversteuerungsvariable im Code hinter der Datei befindet, muss sie manuell aktualisiert werden.

Bei einem ASP.NET 4.5-Projekt, bei dem der Code hinter der Variable ein HtmlIframe ist, tritt ein ähnliches Problem auf, wenn das targetFramework-Attribut des Kompilierungselements in der Datei web.config den Wert "4.0" (<compilation targetFramework="4.0"/>) hat. Das verursacht, dass der ASP.NET-Compiler das IFRAME-Serversteuerelement als ein HtmlGenericControl-Steuerelement behandelt. Der Fehler, den Sie sehen, sieht so aus:

Die Basisklasse enthält das Feld 'frame', aber ihr Typ (System.Web.UI.HtmlControls.HtmlIframe) ist nicht mit dem Typ des Steuerelements (System.Web.UI.HtmlControls.HtmlGenericControl) kompatibel.

Um den vorherigen Fehler zu beheben, können Sie sicherstellen, dass die Kompilierungseinstellungen von web.config mit dem Target Framework-Attribut Ihres Projekts übereinstimmen. In diesem Fall sollte das targetFramework-Attribut des Kompilierungselements in der web.config den Wert "4,5" haben.

<compilation targetFramework="4.5"/>


Anmerkung: Wenn Sie das targetFramework-Attribut des httpRuntime-Elements auf 4,5 setzen, wird auch das targetFramework-Attribut des Kompilierungselements auf 4,5 gesetzt. Unter https://blogs.msdn.Microsoft.com/webdev/2012/11/19/all-about-httpruntime-targetframework/ finden Sie weitere Informationen.

Hinweis 2: Es gibt kein <asp:HtmlIframe>-Tag. Das Registrieren des Tag-Präfixes "asp" im Namespace System.Web.UI.HtmlControls ist nicht unbedingt erforderlich, um ein IFRAME-Serversteuerelement zu verwenden.

76
David Johnston

Sie müssen das folgende Tag hinzufügen: 

<asp:HtmlIframe>

Ändern Sie im Designer den Steuerelementtyp in: 

System.Web.UI.HtmlControls.HtmlIframe

Fügen Sie Folgendes in der Web.config hinzu: 

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

Dies sollte es beheben.

32
Panoj

Überprüfen Sie, ob Sie in Ihrer Konfigurationsdatei die nächsten Einstellungen vorgenommen haben. Stellen Sie außerdem sicher, dass es nach der Veröffentlichung vorhanden ist.

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

Ich hoffe es sollte helfen.

6

Sie können Ihr HTML-Element als <iframe> beibehalten und einfach Ihre .designer-Datei ändern, um den Typ in zu ändern 

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

Weiter (oder als Kombination der Antworten hier).

Ich glaube nicht, dass es notwendig ist, die Tags tatsächlich von iframe in asp:HtmlIFrame zu ändern, wenn Sie den Verweis auf den aktualisierten System.Web.UI.HtmlControls haben.

Ich habe meine web.config aktualisiert, um bestimmte Versionen des Tag-Präfixes zu entfernen und durch Folgendes zu ersetzen:

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

Bereinigen Sie das Projekt und erstellen Sie es neu. Das generiert alle Designer-Tags für mich mit der korrekten HtmlIFrame-Ausgabe.

2
dougajmcdonald

ich hatte auch dieses Problem, aber ich löschte einfach dieses UserControl und fügte ein neues UserControl mit demselben Namen hinzu, dann wurde mein Problem behoben.

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

1
Amit Sharma

Sehen Sie sich die Designer-Datei an, und ersetzen Sie Htmliframe für HtmlGenericControl in dem Steuerelement, das Probleme hat.

0
ovamendocino

Ab .NET 4.5 hat Microsoft beschlossen, den iframe von einem HtmlGenericControl in ein eigenes Steuerelement, einen HtmlIframe, zu ändern. so muss man das ändern

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

Meine Lösung bestand darin, den IFrame einfach umzubenennen und neu zu erstellen, und die Designer-Datei wird entsprechend mit den richtigen Referenzen aktualisiert. 

0
De Wet Ellis