Frage

Ich verwende eine ältere version der ASP.NET AJAX aufgrund der Laufzeit von Einschränkungen, indem ein ASP.NET Validator in einem update-panel funktioniert nicht.Gibt es einen trick, um diese Arbeit, oder brauche ich die ValidatorCallOut Steuerung, die mit dem AJAX-toolkit?

War es hilfreich?

Lösung

Ich vermute, Sie sind mit der ursprünglichen Version (RTM) von .NET 2.0.

Bis Anfang 2007 validator-Steuerelemente wurden nicht kompatibel mit UpdatePanels.Dies wurde behoben mit dem SP1 von der .NET-Framework.

Die Quelle des Problems ist, dass UpdatePanel erkennen kann, die markup-änderungen in Ihrer Seite, aber es hat keine Möglichkeit zu verfolgen, Skripte richtig.Prüfungen verlassen sich stark auf Skripts.Während eines teilweisen Postbacks, die Skripte entweder weggeblasen ist, nicht aktualisiert wird, oder nicht ausführen, wenn Sie gemeint sind.

In frühen betas, MS hatte das UpdatePanel versuchen guess welche Skripte gebraucht neu gerendert, oder laufen.Es funktionierte nicht sehr gut, und Sie hatte zu nehmen Sie es heraus.

Zu bekommen, um das unmittelbare problem, Microsoft veröffentlicht eine gepatchte version des validator-Klassen in eine neue DLL aufgerufen Validators.DLL und gab Anweisungen, wie Sie sagen, ASP.NET diese Klassen verwenden, anstatt die echten.Wenn Sie Google für diesen DLL-name, finden Sie weitere Informationen.Siehe auch In diesem blog-Beitrag.

Dies war ein stop-gag Messen, und Sie sollten nicht verwenden es vermeiden Sie es, wenn möglich.

Die richtige Lösung für das problem kam kurz danach, im .NET 2.0 SP1.Microsoft hat eine neue Mechanismus zur Registrierung von scripts in SP1 und verändert die real validator-Klassen zu verwenden, die mechanik anstelle des älteren.

Lassen Sie mich Ihnen einige details über die änderungen:

Traditionell, Sie sollten sich zu registrieren Skripts Seite über Methoden wie die Seite.RegisterStartupScript() und Seite.RegisterClientScriptBlock().Das problem ist, dass diese Methoden waren nicht auf Erweiterbarkeit ausgelegt und UpdatePanel hatte keine Möglichkeit zu monitor die calls.

In SP1 eine neue Eigenschaft mit dem Objekt auf der Seite als Seite.ClientScripts.Dieses Objekt hat Methoden zur Registrierung von scripts, die äquivalent sind (und in mancher Hinsicht besser) auf die Originale.Auch UpdatePanel überwachen können diese Anrufe, so dass es rerenders oder ruft die Methoden bei Bedarf.Die älteren RegisterStartupScript () etc.Methoden sind veraltet.Sie funktionieren immer noch, aber nicht in einem UpdatePanel.

Es gibt keinen Grund (außer Politik, nehme ich an) nicht aktualisieren Ihre Installationen .NET 2.0 SP1.Service Packs tragen Sie wichtige Updates.

Viel Glück.

Andere Tipps

@Jonathan Holland:Was ist falsch mit der Verwendung Validators.dll?

Da Sie ersetzen die original-Klassen, Sie sind ruhig umgeht einen bug-und security-fixes, Verbesserungen, etc.dass Microsoft möglicherweise die Freisetzung in die Zukunft (oder vielleicht bereits veröffentlicht).Es sei denn, Sie suchen gezielt im web.Konfiguration, die Sie möglicherweise nie bemerken, dass Sie überspringen von patches.

Natürlich haben Sie, um zu bewerten jede situation.Wenn Sie absolut stecken verwenden .NET 2.0 RTM, dann Validators.dll ist besser als nichts.

@jmein

Eigentlich das problem ist, dass der Validator client-Skripts nicht funktionieren, wenn innerhalb eines updatePanel (UpdatePanels aktualisieren verwenden .innerHTML, das fügt dem Skript-Knoten als text-nodes, nicht-Skript-Knoten, so dass der browser nicht ausführen).

Das Update wurde ein patch veröffentlicht, der von microsoft behebt dieses Problem.Ich fand es mit der Hilfe von Google.

http://blogs.msdn.com/mattgi/archive/2007/01/23/asp-net-ajax-validators.aspx

Wenn für was immer Grund Sie nicht verwenden die udpated version des ASP.NET validator-Steuerelemente ist eigentlich sehr einfach zu validieren Validierung Gruppe selbst, alle Sie tun müssen, ist Anruf

Page_ClientValidate("validationGroupName");

Dann können Sie die PageRequestManager führen Sie die Validierung, wie Sie benötigen.

Auf jeden Fall können Sie mit der aktualisierten Steuerelemente für die Gültigkeitsprüfung ist der Weg zu gehen, aber ich bin mir ziemlich partielle JavaScript ;)

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