Ich versuche, ein IsRequired
Attribut auf unserem eigenen Lookup-Steuerelement zu implementieren (eigentlich ein Wrapper mit einem Ajax AutoCompleteExtender
und einem CustomValidator
). Wie Sie wissen, beinhaltet das Implementieren der richtigen Validierung für ein Suchsteuerelement nicht nur das Überprüfen, ob das Steuerelement nicht leer ist, sondern der Eintrag muss tatsächlich in der Suchvorhersageliste vorhanden sein.CustomValidator zum Implementieren IsRequired auf Ajax AutoCompleteExtender
Ich tue dies mit dem folgenden ClientValidationFunction
zum CustomValidator
verdrahtet:
function ValidateLookup(sender, args) {
var isValidEntry = $("#" + sender.controltovalidate)
.parent()
.children()
.filter("input:first")
.attr('ValidEntry') == args.Value;
if (isValidEntry)
args.IsValid = true;
else {
var acEntries = $("#" + sender.controltovalidate)
.parent()
.find("li[innerText=" + args.Value + "]");
args.IsValid = acEntries.length > 0;
if (args.IsValid)
$("#" + sender.controltovalidate)
.parent()
.children()
.filter("input:first")
.attr('ValidEntry', args.Value);
}
}
Ich ausnutzt, wie die AutoCompleteExtender macht den Eintrag zu überprüfen, ich weiß, eine Textbox gibt es für Ihre Ein Eintrag, ein Versteckter, der den letzten ausgewählten Wert enthält (wird nicht gefüllt, bis die Validierung durchgeht) und eine ungeordnete Liste (ul), die die Suchvorhersagen enthält.
Im Moment funktioniert das, aber ich weiß nicht, ob jemand eine Idee hat, wie man es weniger wie einen Hack aussehen lässt. Das aktuelle Problem besteht darin, dass das Validieren des aktuellen Eintrags anhand der Liste der Vorhersagen nur funktioniert, wenn die Validierung vom Steuerelement aufgerufen wird (da die ul ausgefüllt und unterhalb der Autocomplete-Box verfügbar ist). Wenn die Seite die Validierung aufruft, ist die ul nicht da, deshalb habe ich hinzugefügt, dass "wenn der aktuelle Eintrag der gleiche ist wie der letzte gültige Eintrag, nichts anderes überprüft wird".
Alle Ideen werden sehr geschätzt.