Microsoft AJAX:Die Eigenschaft „x“ einer undefinierten oder Nullreferenz kann nicht abgerufen werden

StackOverflow https://stackoverflow.com//questions/12649044

Frage

Wie behebe ich den folgenden Fehler, der von einer Microsoft AJAX JavaScript-Framework-Methode ausgelöst wird?Es handelt sich um eine automatisch generierte JavaScript-Zeile aus einem benutzerdefinierten Benutzersteuerelement in einer Web Forms-App (Sitefinity 5 CMS).

Fehlermeldung:

Die Eigenschaft „FancyBlockDesigner“ mit einem undefinierten oder Nullverweis kann nicht abgerufen werden

Hier ist das JavaScript, das den Fehler auslöst:

Sys.Application.add_init(function() {
    $create(SitefinityWebApp.Esd.TheLab.SampleHtmlEditor.FancyBlockDesigner, null, null, {"Editor":"propertyEditor_ctl00_ctl00_ctl00_ctl00_ctl00_Editor","propertyEditor":"propertyEditor"}, $get("propertyEditor_ctl00_ctl00_ctl00"));
});

Anstatt die ASCX- und CS-Dateien zu diskutieren, die versuchen, mir dieses Detail zu entziehen, möchte ich wissen, was dieser Fehler bedeutet.Wenn ich die Details verstehe, könnte die Abstraktion sinnvoller sein.

War es hilfreich?

Lösung

Die Funktion „$create“ in ASP.NET Ajax erstellt eine Instanz der JavaScript-Klasse.Microsoft hatte seine eigene Meinung darüber, wie man JavaScript objektorientiert gestalten kann, und wie die Zeit gezeigt hatte, war ihr Ansatz nicht gerade perfekt.

Wie auch immer, um zu erklären, was passiert, möchte ich einen kleinen Überblick darüber geben, wie es funktioniert.Wir beginnen mit einer serverseitigen Steuerung, die implementiert IScriptControl Schnittstelle, die zwei Mitglieder erfordert:GetScriptDescriptors und GetScriptReferences.Die zweite Möglichkeit ist ziemlich einfach: Sie ermöglicht die Registrierung von Verweisen auf alle JavaScript-Dateien, die Sie benötigen.Mit den GetScriptDescriptors hingegen können Sie alle Instanzen von JavaScript-Klassen definieren, die Sie verwenden möchten, und ihre Eigenschaften festlegen – sie können, wenn Sie so wollen, initialisieren.

Der von Ihnen eingefügte automatisch generierte JavaScript-Code besagt im Grunde, dass Sie in GetScriptDescriptors definiert haben, dass Sie eine Instanz vom Typ „SitefinityWebApp.Esd.TheLab.SampleHtmlEditor.FancyBlockDesigner“ benötigen, in der die Editor-Eigenschaft initialisiert werden soll.Dieser Code sucht nach einem JavaScript-Konstruktor, der so aussieht:

function SitefinityWebApp.Esd.TheLab.SampleHtmlEditor.FancyBlockDesigner(element) {

}

Für das ist höchstwahrscheinlich auch ein Prototyp definiert, etwa so:

SitefinityWebApp.Esd.TheLab.SampleHtmlEditor.FancyBlockDesigner.prototype = {

}

Da der von Ihnen gepostete Fehler nun lautet:„Die Eigenschaft „FancyBlockDesigner“ mit undefinierter oder Nullreferenz konnte nicht abgerufen werden“, höchstwahrscheinlich liegt das Problem an einer der folgenden Ursachen:

  • Sie haben die JavaScript-Datei, die die Klasse (Konstruktor + Prototyp) enthält, über die ich oben gesprochen habe, nicht eingebunden
  • Sie haben vergessen, „FancyBlockDesigner“ zum Konstruktor hinzuzufügen (anscheinend haben Sie ein anderes Objekt, vielleicht über MS Ajax-Namespaces – „SitefinityWebApp.Esd.TheLab“)
  • Sie haben den Namespace „SampleHtmlEditor“ nicht registriert.Stellen Sie sicher, dass sich oben in Ihrer JS-Datei Folgendes befindet: Type.registerNamespace("SitefinityWebApp.Esd.TheLab.SampleHtmlEditor");

Um es kurz zu machen: Die Funktion mit dem Namen „SitefinityWebApp.Esd.TheLab.SampleHtmlEditor.FancyBlockDesigner“ kann nicht gefunden werden.

Hoffe das hilft, Ivan

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top