это была очень сложная проблема для меня, но я нашел обходной путь (не такой простой), который мне подходит.
на странице aspx:
<input id="ss" type="text" oninput="writeFilterValue()"/>
<asp:HiddenField ID="hf1" runat="server" Value="" ClientIDMode="Static" />
Мне нужен HTMLтип ввода из-за функции «oninput», которая недоступна для классических элементов управления asp.net.Функция writeFilterValue () вызывает обратную передачу, которая фильтрует значения заданного ListBox (в выделенном коде).
Я определил эти две функции javascript:
<script type="text/javascript">
function writeFilterValue() {
var bla = document.getElementById("ss").value;
$("#hf1").val(bla)
__doPostBack();
}
function setTboxValue(s) {
document.getElementById('ss').value = s;
document.getElementById('ss').focus();
}
</script>
Теперь вы можете использоватьпостбэк с выделенным кодом для захвата значения hf1, каждый раз, когда какой-то один символ вводится в поле ввода.При выделении кода:
If IsPostBack Then
FiltraLbox(hf1.Value)
End If
Функция FiltraLbox (hf1.Value) изменяет источник данных Listbox и перепривязывает его:
Public Sub FiltraLbox(ByVal hf As String)
If hf <> "" Then
' change datasource here, that depends on hf value,
ListBox1.DataBind()
ScriptManager.RegisterStartupScript(Page, Page.GetType(), "text", setTboxValue('" + hf + "');", True)
End If
End Sub
В конце я вызываю функцию setTboxValue (), который переписывает введенное текстовое значение, потерянное при обратной передаче, и фокусируется на нем.
Наслаждайтесь им.