Kundenüberprüfung
Wenn in Ihrer Seite die Client -Authentifizierung aktiviert ist, erfolgt eine völlig andere Folge von Ereignissen während der Hin- und Rückfahrt. Die Client -Authentifizierung wird mit Client JScript® implementiert. Um diese Überprüfung zu implementieren, sind keine binären Komponenten erforderlich.
Obwohl die Jscript -Sprache gut standardisiert ist, gibt es für das DOMR -Objektmodell (DOM) kein weit verbreiteter Standard, mit dem im Browser mit HTML -Dokumenten interagiert werden. Daher wird die Client -Authentifizierung nur in Internet Explorer 4.0 und später durchgeführt, da das Authentifizierungsobjekt Internet Explorer DOM ist.
Aus serverer Sicht bedeutet die Client -Überprüfung nur, dass die Überprüfungsregelung unterschiedliche Inhalte an HTML sendet. Abgesehen davon ist seine Ereignissequenz genau die gleiche. Die serverseitige Überprüfung wird weiterhin ausgeführt. Obwohl es überflüssig erscheinen mag, ist es sehr wichtig, weil:
Einige Überprüfungskontrollen unterstützen möglicherweise keine Client -Skripte. Es gibt ein gutes Beispiel: Wenn Sie sowohl CustomValidator- als auch Server -Überprüfungsfunktionen verwenden möchten, gibt es jedoch keine Client -Überprüfungsfunktion.
Sicherheitsvorkehrungen. Einige Leute können leicht eine Seite mit Skripten erhalten und diese Seite dann deaktivieren oder ändern. Sie sollten keine Skripte verwenden, um zu verhindern, dass schlechte Daten in Ihr System eintreten, sondern nur um ein schnelleres Feedback von Benutzern zu erhalten. Wenn Sie also CustomValidator verwenden möchten, sollten Sie ohne die entsprechende Serverüberprüfungsfunktion keine Client -Überprüfungsfunktion angeben.
Jede Überprüfung stellt sicher, dass ein Standard -Client -Skriptblock an die Seite gesendet wird. Tatsächlich ist dies nur ein kleiner Teil des Codes, der Verweise auf den Code in der Skriptbibliothek webuivalidation.js enthält. Diese Skriptbibliotheksdatei enthält die gesamte Logik für die Client -Überprüfung.
Über die Skriptbibliothek
Da sich das Skript des Verifizierungs-Webkontrolls in der Skriptbibliothek befindet, muss nicht alle clientverifizierten Code direkt an die Seite gesendet werden, obwohl er dies auf der Oberfläche zu tun scheint. Die Hauptreferenzen der Hauptskriptdatei sehen so aus:
<script Language = "JavaScript"
src = "/_ Aspx/1.0.9999/script/webuivalidation.js"> </script>
Standardmäßig ist die Skriptdatei im Standard-Root-Verzeichnis im Verzeichnis "_aspx" installiert und mit dem Stammrelations-Skript-Richtlinie aufgerufen, das mit einem Vorwärtsschräggang beginnt. Diese Referenz zeigt an, dass jedes einzelne Objekt keine Skriptbibliothek enthalten muss und alle Seiten auf demselben Computer dieselbe Datei verweisen können. Sie werden feststellen, dass es auf diesem Pfad auch eine gemeinsame Sprachlaufversionsnummer gibt, sodass verschiedene Laufzeitversionen auf demselben Computer ausgeführt werden können.
Wenn Sie sich Ihr Standard -Virtual Root -Verzeichnis ansehen, finden Sie die Datei und sehen Sie sich den Inhalt an. Der Speicherort dieser Dateien wird in der Datei config.web angegeben. Die Datei config.Web ist eine XML -Datei für die meisten ASP+ -Inneneinstellungen. Das Folgende ist die Definition des Speicherorts in der Datei:
<Webcontrols
ClientscriptsLocation = "/_ Aspx/{0}/script/"
/>
Sie werden ermutigt, das Skript zu lesen, um Einblicke in das zu erhalten, was passiert ist. Es wird jedoch empfohlen, diese Skripte nicht zu ändern, da ihre Funktionalität eng mit bestimmten Laufzeitversionen verknüpft ist. Wenn die Laufzeitversion aktualisiert wird, erfordern diese Skripte möglicherweise auch entsprechende Updates, und Sie geben entweder die Änderungen auf oder konfrontiert das Problem, dass das Skript nicht funktioniert. Wenn ein bestimmtes Projekt diese Skripte ändern muss, sichern Sie zuerst die Skripte und weisen Sie Ihr Projekt auf die Sicherungsdatei auf, indem Sie den Speicherort dieser Dateien durch eine private Konfiguration ersetzen. Wenn die Zeichenfolge die Formatanweisung "{0}" enthält, ersetzt die Laufzeitversionsnummer die Anweisung. Es ist am besten, diesen Ort in eine relative oder absolute Referenz zu ändern.
Deaktivieren Sie die Client -Authentifizierung
Manchmal möchten Sie möglicherweise keine Client -Authentifizierung. Wenn die Anzahl der Eingabefelder gering ist, kann die Client -Überprüfung von geringem Nutzen sein. Schließlich müssen Sie eine Logik haben, die jedes Mal einmal zum und zum Server reisen muss. Sie werden feststellen, dass die Informationen, die dynamisch auf dem Kunden angezeigt werden, negative Auswirkungen auf Ihr Layout haben.
Verwenden Sie zur Deaktivierung der Client -Authentifizierung die Seitenrichtlinie "ClientTarget = Downlevel". Diese Anweisung ähnelt dem Beginn der folgenden ASPX -Datei:
< %@ Page Language = "C#" ClientTarget = Downlevel %>
Der Standardwert dieser Richtlinie ist "automatisch", was bedeutet, dass Sie nur die Client -Authentifizierung für Microsoft Internet Explorer 4.0 oder höher durchführen.
HINWEIS: Leider deaktiviert diese Anweisung in Beta 1 leider nicht einfach die Überprüfung, sondern führt auch dazu, dass alle Websteuerungen mithilfe von HTML 3.2 -Tags verarbeitet werden, was unerwartete Ergebnisse erzielen kann. Die endgültige Version bietet eine bessere Möglichkeit, dieses Problem zu kontrollieren.
Client -Ereignissequenz
Diese Sequenz ist eine Folge von Ereignissen, die beim Ausführen einer Seite mit Client -Validierung auftreten:
Wenn die Seite in den Browser geladen wird, muss jede Überprüfungsregelung einige Zeit initialisiert werden. Diese Steuerelemente werden als <Pan> -Tags gesendet, und ihre HTML -Attribute sind denjenigen auf dem Server am nächsten. Am wichtigsten ist, dass alle vom Validator verwiesenen Eingabelemente zu diesem Zeitpunkt "montiert" werden. Das referenzierte Eingabeelement ändert seine Client -Ereignisse so, dass die Überprüfungsroutine jedes Mal aufgerufen wird, wenn sich die Eingabe ändert.
Der Code in der Skriptbibliothek wird ausgeführt, wenn der Benutzer mit der Registerkarte Taste zwischen Feldern wechselt. Wenn sich ein separates Feld ändert, wird die Überprüfungsbedingung neu bewertet, wodurch der Validator bei Bedarf sichtbar oder unsichtbar wird.
Wenn der Benutzer versucht, ein Formular einzureichen, werden alle Validatoren neu bewertet. Wenn alle diese Validatoren gültig sind, wird das Formular an den Server übermittelt. Wenn es ein oder mehrere Fehler gibt, treten folgende Situationen auf:
Die Einreichung wurde storniert. Das Formular wird nicht an den Server übermittelt.
Alle ungültigen Validatoren sind sichtbar.
Wenn eine Überprüfungszusammenfassung Showsummary = true enthält, werden alle Fehler aus der Überprüfung der Überprüfung gesammelt und deren Inhalt mit diesen Fehlern aktualisiert.
Wenn eine Überprüfungszusammenfassung ShowMessageBox = true enthält, werden Fehler gesammelt und im Informationsfeld des Clients angezeigt.
Da bei jeder Eingabe oder Übermittlung einer Änderung oder Übermittlung der Client -Überprüfungskontrollen ausgeführt werden, werden diese Überprüfungskontrollen normalerweise zweimal oder mehrmals auf dem Client bewertet. Bitte beachten Sie, dass diese Überprüfungssteuerungen nach der Einreichung weiterhin auf dem Server neu bewertet werden.
Client -API
Es gibt eine kleine API, die auf der Client -Maschine verwendet werden kann, um verschiedene Effekte in Ihrem eigenen Client -Code zu erzielen. Da einige Routinen nicht versteckt werden können, können Sie theoretisch den Kunden nutzen, um alle vom Skript definierten Variablen, Merkmale und Funktionen zu überprüfen. Viele davon sind jedoch Implementierungsdetails, die geändert werden können. Im Folgenden werden die Kundenobjekte zusammengefasst, die Sie zur Verwendung ermutigen.
Tabelle 3. Client -Objekte
Namenstyp Beschreibung
Die variable page_isvalid boolean gibt an, ob die Seite derzeit gültig ist. Das Verifizierungsskript hält die Variable immer auf dem neuesten Stand.
Page_validators Element Array Dies ist ein Array, das alle Validatoren auf der Seite enthält.
Die variable page_validationactive boolean gibt an, ob die Überprüfung durchgeführt werden soll. Das Einstellen dieser Variablen auf False kann durch Programmierung ausgeschaltet werden.
Isvalid Boolean Eigenschaft Jeder Client -Validator hat diese Eigenschaft angibt, ob der Validator derzeit gültig ist. Beachten Sie, dass diese Eigenschaft in der PDC -Version mit oberem und unteren Fall ("isvalid") gemischt wird.
Umgehung der Client -Authentifizierung
Eine Aufgabe, die Sie häufig ausführen müssen, ist das Hinzufügen einer Schaltfläche Abbrechen oder Navigation auf der Seite. In diesem Fall möchten Sie die Seite möglicherweise mit der Schaltfläche einreichen, auch wenn auf der Seite ein Fehler vorliegt. Da das Client -Schaltfläche "Onclick" -Event vor dem Ereignis "OnSubmit" des Formulars erfolgt, kann es vermeiden, dass Schecks einreichen und die Überprüfung umgehen. Im Folgenden wird beschrieben, wie die Aufgabe mit der HTML -Bildsteuerung als Abbrechen -Schaltfläche abgeschlossen wird:
<Eingabe type = Bild runat = Server
value = "abbrechen"
Onserverclick = cmdcancel_click>
Die Ausführung dieser Aufgabe mithilfe der Schaltfläche oder der ImageButton-Steuerung führt zu einer gewissen Verwirrung, da angenommen wird, dass das "Onclick" -Ereignis ein serverseitiges Ereignis mit demselben Namen ist. Sie sollten das Ereignis im Client -Skript festlegen:
<ASP: ImageButton Runat = Server ID = CmdimgCancel
AlternateText = "Abbrechen"
Onclick = cmdcancel_click/>
<script Language = "JavaScript">
document.all ["cmdimgcancel"]. onclick =
Neue Funktion ("page_validationactive = false;");
</script>
Eine andere Möglichkeit, dieses Problem zu lösen, besteht darin, die Schaltfläche Abbrechen so festzulegen, dass es das Commit -Ereignis im Client -Skript nicht auslöst, wenn es zurückgibt. Die HTMlinputbutton- und Linkbutton -Steuerelemente sind Beispiele dafür.
Spezialeffekte
Eine weitere häufige Anforderung besteht darin, dass bei einem Fehler zusätzlich zu der vom Validator selbst angezeigten Fehlermeldung andere Effekte erforderlich sind. In diesem Fall müssen alle von Ihnen vorgenommenen Änderungen gleichzeitig auf dem Server oder Client vorgenommen werden. Angenommen, Sie müssen ein Etikett hinzufügen, um die Farbe zu ändern, je nachdem, ob die Eingabe gültig ist oder nicht. Hier erfahren Sie, wie Sie diese Aufgabe auf dem Server implementieren:
öffentliche Klasse ChangeColorPage: Seite {
Public Label LBLZIP;
öffentliche RegularexpressionValidator Valzip;
geschütztes Override void Onload (eventArgs e) {
LBLZIP.FORECOLOR = VALZIP.ISVALID?
}
}
Alle oben genannten Methoden sind perfekt, aber solange Sie die oben erwähnte Überprüfung ändern, werden Sie feststellen, dass sie, wenn Sie dasselbe auf dem Client tun, sehr inkonsistent aussehen. Das Verifizierungsrahmen verhindert Sie von vielen dieser doppelten Effekte, kann jedoch nicht andere Effekte vermeiden, die Sie sowohl auf dem Client als auch auf dem Server gleichzeitig erreichen müssen. Hier ist ein Ausschnitt aus der gleichen Aufgabe im Client:
<ASP: Etikett ID = LBLZIP RUNAT = Server
Text = "Postleitzahl:"/>
<ASP: Textbox ID = TXTIZIP RUNAT = Server
/> </ASP: textbox> <br>
<ASP: RegularexpressionValidator ID = Valzip Runat = Server
ControlToValidate = txtZIP
ErrorRrormessage = "Ungültige Postleitzahl"
ValidationExpression = "[0-9] {5}" /> <br>
<script Language = JavaScript>
Funktion txtziponchange () {
// Wenn die Client -Authentifizierung nicht aktiv ist, wird keine Aktion durchgeführt
if (typeof (page_validators) == "undefined") return;
// Ändern Sie die Farbe des Etiketts
LBLZIP.Style.Color = Valzip.isvalid?
}
</script>
Beta 1 Client -API
Für Beta -Version 1 können einige Funktionen, die aus Client -Skripten aufgerufen werden können, andere Situationen verursachen.
Tabelle 4. Funktionen, die aus Client -Skripten aufgerufen wurden
Name Beschreibung
ValidatorValidat (VAL) nimmt einen Client -Validator als Eingabe. Lassen Sie den Validator seine Eingabe überprüfen und die Anzeige aktualisieren.
Validierable (Val, Enable) erhält einen Client -Validator und einen Booleschen Wert. Aktivieren oder deaktivieren Sie den Client -Validator. Wenn deaktiviert, wird der Client -Validator nicht bewertet und der Client -Validator wird immer als gültig angezeigt.
ValidatorHookUpControl (Steuerung, Val) erhält ein Eingangs -HTML -Element und einen Client -Validator. Ändern oder erstellen Sie das Änderungsereignis für dieses Element, damit der Validator bei Änderungen aktualisiert wird. Diese Funktion ist für benutzerdefinierte Validatoren basierend auf mehreren Eingabewerten geeignet.
Sein besonderer Zweck ist es, den Validator zu aktivieren oder zu deaktivieren. Wenn Sie möchten, dass die Überprüfung nur in einer bestimmten Situation wirksam ist, müssen Sie möglicherweise den Aktivierungsstatus sowohl auf dem Server als auch auf dem Client ändern. Andernfalls werden Sie feststellen, dass der Benutzer die Seite nicht einreichen kann.
Das Folgende ist das Beispiel oben sowie ein Feld, das nur dann validiert wird, wenn ein Kontrollkästchen nicht aktiviert ist.
öffentliche Klasse Bedingung: Seite {
public htmlinputcheckbox kkssamaseas;
public forderfieldValidator rfvalshipAddress;
Protected Override void validate () {
bool Enableship =! ChkSameas.Conted;
rfvalshipAddress.Enabled = Enableship;
Base.Validate ();
}
}
Hier ist der Client -Äquivalentcode:
<Eingabetyp = CheckBox Runat = Server ID = ChkSameas
> Wie Zahlungsadresse <br>
<script Language = JavaScript>
Funktion onchangeSameas () {
var enableShip =! event.srcelement.status;
Validatorableable (rfvalshipAddress, Enableship);
}
</script>