Heim Backend-Entwicklung C#.Net-Tutorial Lösung für Fehler beim Rendern von Steuerelementen in VS2010

Lösung für Fehler beim Rendern von Steuerelementen in VS2010

Jan 11, 2017 am 10:44 AM

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);
}
Nach dem Login kopieren

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 = "∨";
Nach dem Login kopieren

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);
}
Nach dem Login kopieren

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!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

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

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Was ist die Rolle von CHAR in C -Saiten? Was ist die Rolle von CHAR in C -Saiten? Apr 03, 2025 pm 03:15 PM

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.

Wie man verschiedene Symbole in der C -Sprache verwendet Wie man verschiedene Symbole in der C -Sprache verwendet Apr 03, 2025 pm 04:48 PM

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.

Wie man mit Sonderfiguren in der C -Sprache umgeht Wie man mit Sonderfiguren in der C -Sprache umgeht Apr 03, 2025 pm 03:18 PM

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.

Der Unterschied zwischen char und wchar_t in der C -Sprache Der Unterschied zwischen char und wchar_t in der C -Sprache Apr 03, 2025 pm 03:09 PM

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 asynchronem C# Der Unterschied zwischen Multithreading und asynchronem C# Apr 03, 2025 pm 02:57 PM

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.

Wie man CHO in C -Sprache umwandelt Wie man CHO in C -Sprache umwandelt Apr 03, 2025 pm 03:21 PM

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.

Was ist die Funktion der C -Sprachsumme? Was ist die Funktion der C -Sprachsumme? Apr 03, 2025 pm 02:21 PM

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.

So verwenden Sie char Array in C -Sprache So verwenden Sie char Array in C -Sprache Apr 03, 2025 pm 03:24 PM

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 ().

See all articles