Gibt es eine elegante Art und Weise eine Checkbox und ein Textfeld mit ASP.NET Validatoren zu vergleichen?

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

  •  01-07-2019
  •  | 
  •  

Frage

Ich habe einen Asp.Net Repeater, die ein Textfeld und eine Checkbox enthält. Ich brauche die clientseitige Validierung hinzuzufügen, die überprüft, ob, wenn das Kontrollkästchen aktiviert ist, kann die Textbox nur einen Wert von Null oder leer akzeptieren.

Ich möchte Validator die eine oder mehrere der Asp.Net verwenden Kontrollen dies zu erreichen, eine konsistente Anzeige für Client-Seite Fehler zu liefern (serverseitige Fehler, die von einem anderen Subsystem behandelt werden).

Die Asp: CompareValidator scheint nicht flexibel genug zu sein, um diese Art von komplexem Vergleich durchzuführen, so dass ich nach links schaue am Asp. CustomValidator

Das Problem in Ich renne ist, dass es keine Möglichkeit zu sein scheint benutzerdefinierte Informationen in die Validierungsfunktion zu übergeben. Dies ist ein Problem, weil die clientIds der Checkbox und das Textfeld ein, um mich zur Laufzeit nicht bekannt sind (wie sie Teil eines Repeater sind).

So ... Meine Optionen zu sein scheinen:

  1. Führen Sie das Textfeld und Kontrollkästchen, um das CustomValidator irgendwie (scheint nicht möglich zu sein).
  2. Finden Sie die TextBox durch JavaScript auf der Grundlage der Argumente der CustomValidator eingeleitet. Ist das überhaupt möglich ist, was mit der ClientId zweideutig zu sein?
  3. Forget Validierung vollständig und emittieren benutzerdefinierte JavaScript (mir erlaubt, beide clientIds auf eine benutzerdefinierte Funktion zu übergeben).

Alle Ideen, was könnte eine bessere Art und Weise der Umsetzung sein?

War es hilfreich?

Lösung

Ich denke, der beste Weg, BaseValidator in einer neuen Klasse erben würde, und diese IDs zu Ihrer Kontrolle als Attribute übergeben. Sie sollten die IDs in Ihrem Validator lösen können, ohne die vollständige Client-Seite ID zu wissen, die zur Laufzeit erzeugt wird. Sie sollen zuerst, und auf dem Client zweiten die Daten Validierung auf dem Server erhalten.

Andere Tipps

Können Sie nicht den CustomValidator innerhalb des Repeaters setzen? Wenn nicht, können Sie es dynamisch erstellen, wenn der Repeater gebunden ist und Benutzer Findcontrol ()

protected MyDataBound(object sender, RepeaterItemEventArgs e) {
  (CheckBox)cb = (CheckBox)e.Item.FindControl("myCheckboxName");
  (TextBox)tb = (TextBox)e.Item.FindControl("myTextBox");
}

... oder so ähnlich. Ich habe den Code aus der Spitze von meinem Kopf.

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