Я пытаюсь реализовать атрибут IsRequired
на нашем собственном контроле поиска (на самом деле это обертка, содержащая Ajax AutoCompleteExtender
и один CustomValidator
). Как вы знаете, реализация правильной проверки для контроля поиска не просто включает проверку, так как элемент управления не пуст, запись должна фактически существовать в списке прогнозов поиска.CustomValidator для реализации IsRequired на Ajax AutoCompleteExtender
Я делаю это с помощью следующего ClientValidationFunction
проводного к CustomValidator
:
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);
}
}
Я эксплуатирую как AutoCompleteExtender делает, чтобы проверить запись, я знаю, что есть текстовое поле для вашего запись, скрытая, которая содержит последнее выбранное значение (не заполняется до тех пор, пока проверка не пройдет) и один неупорядоченный список (ul), который содержит прогнозы поиска.
Сейчас это работает, но я не знаю, есть ли у кого-нибудь представление о том, как сделать его похожим на хак. Текущая проблема заключается в том, что проверка текущей записи в отношении списка прогнозов работает только тогда, когда контроль вызывается элементом управления (поскольку ul заполняется и становится доступным/плавающим под полем автозаполнения). Когда страница вызывает проверку, ul не существует, поэтому я добавил, что «если текущая запись совпадает с последней допустимой записью, не проверяйте ничего».
Любые идеи приветствуются.