Asp.net 如果结果太多,自动完成扩展程序下拉关闭
Asp.net Autocomplete Extender Drop Down closing if too many results
我在 asp.net 网页上使用自动完成扩展程序来在用户开始输入姓氏时获取数据。只有当似乎返回了大量结果时,它才不会让用户 select 从下拉列表中选择一个项目。它按州搜索姓氏,因此如果用户输入 2 个字母的姓氏,例如 "Li",则可能会返回许多结果。有没有办法在不自动关闭的情况下允许更多结果?
<asp:AutoCompleteExtender ID="AutoCompleteExtender" runat="server"
DelimiterCharacters="" Enabled="True" ServicePath="AutoComplete.asmx"
ServiceMethod="GetCompletionList" TargetControlID="NameTextBox"
UseContextKey="true" ContextKey="StateDropDown"
onclientitemselected="getSelected"
ShowOnlyCurrentWordInCompletionListItem="True" CompletionInterval="100"
MinimumPrefixLength="2" CompletionListElementID="autocompleteDropDownPanel"
CompletionListCssClass="style101" OnClientShown="checkFocusOnExtender">
</asp:AutoCompleteExtender>
我们遇到过类似的情况,我可以为您提供2种解决方案
解决方案 1: 尝试以滚动的方式为 Extender 添加 Css,您可以通过应用如下内容来实现此目的:
.mycustom {
Overflow: auto;
height: 100px;
}
解决方案2 : 你可以设置你可以设置这个控件的CompletionSetCount 属性,它会在下拉列表中显示较少的项目。默认为 10
。但是这个解决方案有一个缺点,用户可能无法在其中找到他想要的结果,或者他想探索更多其他选项。为此你可以做的是:
尝试保留另一个按钮,例如 More
并触发该按钮,您可以获得另一组结果。
这里是如何从 button
触发 auto extender
的示例
<asp:Button ID="yourtriggerbutton" runat="server" Text="Get Next Set of
Results" OnClientClick="javascript:displayautocomplete()"/>
这是您的 trigger
函数
<script type="text/javascript">
function displayautocomplete() {
var autoComplete = $find("AutoCompleteExtender");
autoComplete.get_element().focus();
autoComplete._textBoxHasFocus = true;
autoComplete.get_element().value =" ";
Sys.Net.WebServiceProxy.invoke(autoComplete.get_servicePath(),
autoComplete.get_serviceMethod(),
false,
{ prefixText: " ", count: autoComplete._completionSetCount },
Function.createDelegate(autoComplete, autoComplete._onMethodComplete),
Function.createDelegate(autoComplete, autoComplete._onMethodFailed),
”,
5000);
$common.updateFormToRefreshATDeviceBuffer();
}
</script>
首先你需要找到扩展器。然后将焦点放在扩展器上。
如果不将焦点放在扩展器上,则什么都不起作用。
设置焦点后,需要使用 Sys.Net.WebServiceProxy.invoke
将调用自动完成的方法。最后要做的是
使用 $common.updateFormToRefreshATDeviceBuffer
方法
由 AutoCompleteExtender 注册,以便
更新表单元素并刷新其文档缓冲区
到浏览器中实时显示的内容。
您可以从 here ,
阅读更多关于此解决方案的信息
我在 asp.net 网页上使用自动完成扩展程序来在用户开始输入姓氏时获取数据。只有当似乎返回了大量结果时,它才不会让用户 select 从下拉列表中选择一个项目。它按州搜索姓氏,因此如果用户输入 2 个字母的姓氏,例如 "Li",则可能会返回许多结果。有没有办法在不自动关闭的情况下允许更多结果?
<asp:AutoCompleteExtender ID="AutoCompleteExtender" runat="server"
DelimiterCharacters="" Enabled="True" ServicePath="AutoComplete.asmx"
ServiceMethod="GetCompletionList" TargetControlID="NameTextBox"
UseContextKey="true" ContextKey="StateDropDown"
onclientitemselected="getSelected"
ShowOnlyCurrentWordInCompletionListItem="True" CompletionInterval="100"
MinimumPrefixLength="2" CompletionListElementID="autocompleteDropDownPanel"
CompletionListCssClass="style101" OnClientShown="checkFocusOnExtender">
</asp:AutoCompleteExtender>
我们遇到过类似的情况,我可以为您提供2种解决方案
解决方案 1: 尝试以滚动的方式为 Extender 添加 Css,您可以通过应用如下内容来实现此目的:
.mycustom {
Overflow: auto;
height: 100px;
}
解决方案2 : 你可以设置你可以设置这个控件的CompletionSetCount 属性,它会在下拉列表中显示较少的项目。默认为 10
。但是这个解决方案有一个缺点,用户可能无法在其中找到他想要的结果,或者他想探索更多其他选项。为此你可以做的是:
尝试保留另一个按钮,例如 More
并触发该按钮,您可以获得另一组结果。
这里是如何从 button
auto extender
的示例
<asp:Button ID="yourtriggerbutton" runat="server" Text="Get Next Set of
Results" OnClientClick="javascript:displayautocomplete()"/>
这是您的 trigger
函数
<script type="text/javascript">
function displayautocomplete() {
var autoComplete = $find("AutoCompleteExtender");
autoComplete.get_element().focus();
autoComplete._textBoxHasFocus = true;
autoComplete.get_element().value =" ";
Sys.Net.WebServiceProxy.invoke(autoComplete.get_servicePath(),
autoComplete.get_serviceMethod(),
false,
{ prefixText: " ", count: autoComplete._completionSetCount },
Function.createDelegate(autoComplete, autoComplete._onMethodComplete),
Function.createDelegate(autoComplete, autoComplete._onMethodFailed),
”,
5000);
$common.updateFormToRefreshATDeviceBuffer();
}
</script>
首先你需要找到扩展器。然后将焦点放在扩展器上。
如果不将焦点放在扩展器上,则什么都不起作用。
设置焦点后,需要使用 Sys.Net.WebServiceProxy.invoke
将调用自动完成的方法。最后要做的是
使用 $common.updateFormToRefreshATDeviceBuffer
方法
由 AutoCompleteExtender 注册,以便
更新表单元素并刷新其文档缓冲区
到浏览器中实时显示的内容。
您可以从 here ,
阅读更多关于此解决方案的信息