


Lösung für Fehler beim Rendern von Steuerelementen in VS2010
Beim Erstellen von Steuerelementen können leicht Fehler wie „Beim Rendern des Steuerelements ist ein Fehler aufgetreten“ und „Eine nicht behandelte Ausnahme ist aufgetreten. Der Objektverweis wurde nicht auf eine Instanz des Objekts festgelegt.“ auftreten, wie unten gezeigt: (Es kann auch einfach daran liegen, dass das Objekt nicht auf eine Instanz des Objekts gesetzt ist.) Das Setzen des runat="server"-Tags verursacht diesen Fehler, bitte überprüfen Sie diesen Punkt zuerst)
Aber zur Kompilierungszeit liegt kein Fehler vor/ Laufzeit.
Analyse
Die in der Abbildung dargestellte Situation wird als „Entwurfszeit“ bezeichnet, um sie von „Kompilierungszeit“/„Laufzeit“ zu unterscheiden.
Entwurfszeit: In der ASP.NET-Umgebung verwenden wir den Webdesigner zum Bearbeiten in Visual Studio. Das direkte Verständnis liegt vor, wenn die ASPX-Seite auf „Design“ wechselt.
Kompilierungszeit: Das direkte Verständnis ist, dass beim Kompilieren die Fehler zu diesem Zeitpunkt normalerweise Fehler sind, die durch Typprüfung, Parameterabgleich usw. verursacht werden und direkt durch Syntaxbeschränkungen begrenzt werden können.
Laufzeit: Das direkte Verständnis erfolgt, wenn Sie eine Vorschau anzeigen/ausführen. Normalerweise bestehen die Fehler zu diesem Zeitpunkt aus spezifischen Ausnahmen und logischen Fehlern.
Lassen Sie uns die Leistung des Steuerelements während des Entwurfs analysieren. VS simuliert auf intelligente Weise das Erscheinungsbild des Ausgabesteuerelements zur Laufzeit. Die Darstellung des Steuerelements durchläuft schließlich die aktuelle Ausgabe . Gemäß dem Standard sollten wir die Ausgabeoperation für das Steuerelement in Render oder RenderContents durchführen (tatsächlich sind auch andere möglich, aber wir machen das normalerweise nicht, oder mehr „Fehler beim Rendern der Steuerung“-Ausnahmen kommen hauptsächlich von Render oder RenderContents ).
Aus der Fehlermeldung „Der Objektverweis ist nicht auf eine Instanz des Objekts festgelegt.“ Dies bedeutet, dass eine oder mehrere Instanzen des Objekts ohne Zuweisung eines Anfangswerts verwendet werden.
Lassen Sie uns einen Blick auf unseren Code werfen:
protected override void RenderContents(HtmlTextWriter writer) { UpButton.Text = Page.Server.HtmlDecode(UpButton.Text); DownButton.Text = Page.Server.HtmlDecode(DownButton.Text); base.RenderContents(writer); }
Da das Steuerelement beim Entwerfen eine Aufwärts- und eine Abwärts-Taste haben muss, werden dort jeweils zwei Schaltflächen benötigt sind spezielle Satzzeichen nach oben und unten, und diese beiden Symbole müssen vom Browser korrekt gerendert werden, indem die Codenummern wie unten gezeigt festgelegt werden:
private string upButtonText = "∧"; private string downButtonText = "∨";
Und diese beiden Symbole werden vor dem Rendern angezeigt. Es wird jedoch so sein Durch eine HtmlEncode-Methode auf der Seite kompiliert und dann ausgegeben. Diese beiden Sonderzeichen können jedoch nur durch direkte Ausgabe dargestellt werden. Das heißt, nach HtmlEncode können die Sonderzeichen nur in Form von Text ∧ ∨ ausgegeben werden und Abwärtspfeile werden nicht ausgegeben. Zu diesem Zeitpunkt müssen wir die umgekehrte Methode Page.Server.HtmlDecode zum Dekodieren einführen. Beachten Sie, dass diese Instanz nur dann ungleich Null ist, wenn die Seite tatsächlich vorhanden ist , und bei einem solchen Vorgang wird der Fehler „Objektverweis nicht auf eine Instanz des Objekts festgelegt“ angezeigt.
Entwurfszeit: Wie bereits erwähnt, simuliert die Entwurfszeit nur den Prozess des Seitenrenderings und die Seite existiert nicht tatsächlich. Daher ist die Instanz des Page-Objekts zu diesem Zeitpunkt leer und nachfolgende Aufrufe lösen eine Ausnahme aus.
Angenommen, wir haben nur diese Methode, um das aktuell erforderliche Verhalten zu verarbeiten. Wenn wir Page aufrufen, führt dies definitiv zu einem Nullobjekt und führt bei nachfolgenden Vorgängen zu Ausnahmen. Zu diesem Zeitpunkt führen wir das Konzept des „Entwurfsmodus“ ein (nicht DesignPattern, sondern DesignMode ist eine geschützte Eigenschaft der Control-Klasse, die einen Wert erhält, der angibt, ob sich die Komponente derzeit im Entwurfsmodus befindet). Das Entwurfsmuster entspricht hier dem Konzept des Designs.
Damit wir den Code in die folgende Form umwandeln können:
protected override void RenderContents(HtmlTextWriter writer) { if (!DesignMode) { UpButton.Text = Page.Server.HtmlDecode(UpButton.Text); DownButton.Text = Page.Server.HtmlDecode(DownButton.Text); } base.RenderContents(writer); }
Auf diese Weise führen wir Instanzen des Page-Objekts nur dann ein, wenn es keine Entwurfszeit ist, also entwerfen Zeitausnahmen Es wird leicht gelöst.
Zusammenfassung
Wenn wir also ein Steuerelement entwerfen, insbesondere wenn wir die Darstellung des Steuerelements berücksichtigen, sollten wir zur Vermeidung ähnlicher Ausnahmen berücksichtigen, dass das Steuerelement genügend Ressourcen erhalten kann, z Elemente, die keine Ressourcen erhalten, sollten wir explizit unterscheiden (wie im obigen Code wird DesignMode verwendet, um zu bestimmen, ob es sich um Code handelt, der zur Entwurfszeit ausgeführt werden soll).
Erweiterung
Die Situation, die wir gerade gesehen haben, kann auf die Ausnahme zurückgeführt werden, die durch die Unfähigkeit verursacht wird, während des Entwurfs auf bestimmte Instanzen zu verweisen. Ähnliche Ausnahmen treten auch in Datenbanken auf Wenn das Dateisystem gelesen wird, ist an die Variable kein Anfangswert angehängt und es werden seitenähnliche Eigenschaften wie Session, Page.Request.QueryString usw. aufgerufen. Da einige der oben genannten Lösungen, insbesondere die für die Seite aufgerufenen zugehörigen Methoden, immer vorhanden sind, werden wir beim Entwerfen der Seite nicht oft Ausnahmen sehen. Wir sollten beim Entwerfen der Steuerelemente mehr Aufmerksamkeit schenken.
Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass er zum Lernen aller beiträgt. Ich hoffe auch, dass jeder die PHP-Chinesisch-Website unterstützt.
Weitere verwandte Artikel zu Lösungen für Fehler beim Rendern von Steuerelementen in VS2010 finden Sie auf der chinesischen PHP-Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

In C wird der Zeichenentyp in Saiten verwendet: 1. Speichern Sie ein einzelnes Zeichen; 2. Verwenden Sie ein Array, um eine Zeichenfolge darzustellen und mit einem Null -Terminator zu enden. 3. Durch eine Saitenbetriebsfunktion arbeiten; 4. Lesen oder geben Sie eine Zeichenfolge von der Tastatur aus.

Die Nutzungsmethoden von Symbolen in der C-Sprachabdeckung Arithmetik, Zuordnung, Bedingungen, Logik, Bitoperatoren usw. werden für grundlegende mathematische Operationen verwendet, Zuordnungsoperatoren werden zur Zuordnung und Addition verwendet, Subtraktion, Multiplikationszuordnung und Abteilungszuweisung, Zustandsbetreiber werden für Unterschiede verwendet. Logische Operationen werden verwendet. Logische Operationen werden verwendet. Logische Operationen werden verwendet. Zeiger, Markierungen am Ende der Datei und nicht numerische Werte.

In der C -Sprache werden Sonderzeichen durch Escape -Sequenzen verarbeitet, wie z. B.: \ n repräsentiert Linienbrüche. \ t bedeutet tab charakter. Verwenden Sie Escape -Sequenzen oder Zeichenkonstanten, um Sonderzeichen darzustellen, wie z. B. char c = '\ n'. Beachten Sie, dass der Backslash zweimal entkommen muss. Verschiedene Plattformen und Compiler haben möglicherweise unterschiedliche Fluchtsequenzen. Bitte wenden Sie sich an die Dokumentation.

In der C -Sprache ist der Hauptunterschied zwischen char und wchar_t die Zeichencodierung: char verwendet ASCII oder erweitert ASCII, wchar_t Unicode; char nimmt 1-2 Bytes auf, wchar_t nimmt 2-4 Bytes auf; char ist für englischen Text geeignet. Wchar_t ist für mehrsprachige Text geeignet. char ist weithin unterstützt, wchar_t hängt davon ab, ob der Compiler und das Betriebssystem Unicode unterstützen. char ist in der Charakterbereich begrenzt, WCHAR_T hat einen größeren Charakterbereich und spezielle Funktionen werden für arithmetische Operationen verwendet.

Der Unterschied zwischen Multithreading und Asynchron besteht darin, dass Multithreading gleichzeitig mehrere Threads ausführt, während asynchron Operationen ausführt, ohne den aktuellen Thread zu blockieren. Multithreading wird für rechenintensive Aufgaben verwendet, während asynchron für die Benutzerinteraktion verwendet wird. Der Vorteil des Multi-Threading besteht darin, die Rechenleistung zu verbessern, während der Vorteil von Asynchron nicht darin besteht, UI-Threads zu blockieren. Die Auswahl von Multithreading oder Asynchron ist von der Art der Aufgabe abhängt: Berechnungsintensive Aufgaben verwenden Multithreading, Aufgaben, die mit externen Ressourcen interagieren und die UI-Reaktionsfähigkeit asynchron verwenden müssen.

In der C -Sprache kann die char -Typ -Konvertierung direkt in einen anderen Typ konvertiert werden, wenn: Casting: Verwenden von Casting -Zeichen. Automatische Konvertierung des Typs: Wenn ein Datentyp einen anderen Werttyp berücksichtigen kann, wandelt der Compiler diese automatisch um.

Es gibt keine integrierte Summenfunktion in der C-Sprache, daher muss sie selbst geschrieben werden. Die Summe kann erreicht werden, indem das Array durchquert und Elemente akkumulieren: Schleifenversion: Die Summe wird für die Schleifen- und Arraylänge berechnet. Zeigerversion: Verwenden Sie Zeiger, um auf Array-Elemente zu verweisen, und eine effiziente Summierung wird durch Selbststillstandszeiger erzielt. Dynamisch Array -Array -Version zuweisen: Zuordnen Sie Arrays dynamisch und verwalten Sie selbst den Speicher selbst, um sicherzustellen, dass der zugewiesene Speicher befreit wird, um Speicherlecks zu verhindern.

Das Char -Array speichert Zeichensequenzen in der C -Sprache und wird als char Array_name [Größe] deklariert. Das Zugriffselement wird durch den Einweisoperator weitergeleitet, und das Element endet mit dem Null -Terminator '\ 0', der den Endpunkt der Zeichenfolge darstellt. Die C -Sprache bietet eine Vielzahl von String -Manipulationsfunktionen wie Strlen (), Strcpy (), Strcat () und strcmp ().
