我試圖在我們自己的查找控件(實際上是一個包含Ajax AutoCompleteExtender
和一個CustomValidator
)的包裝上實現IsRequired
屬性。如您所知,對查找控件執行適當的驗證不僅涉及檢查,而且控件也不是空的,條目必須實際存在於查找預測列表中。CustomValidator在Ajax上實現IsRequired AutoCompleteExtender
我與有線連接到CustomValidator
以下ClientValidationFunction
這樣做:
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不存在,這就是爲什麼我添加了「如果當前條目與最後一個有效條目相同則不檢查其他內容」的原因。
任何想法,不勝感激。