【问题标题】:Asp.net Autocomplete Extender Drop Down closing if too many results如果结果太多,Asp.net Autocomplete Extender Drop Down 将关闭
【发布时间】:2017-09-18 19:32:38
【问题描述】:

当用户开始输入姓氏时,我在我的 asp.net 网页上使用自动完成扩展器来获取数据。只有当看起来有大量结果被返回时,它才让用户从下拉列表中选择一个项目。它按州搜索姓氏,因此如果用户输入 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>

【问题讨论】:

    标签: asp.net vb.net autocompleteextender


    【解决方案1】:

    我们也遇到过这样的情况,我可以为你提供两种解决方案

    解决方案 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 阅读有关此解决方案的更多信息,

    【讨论】:

    • 谢谢,让我试试这个,我会尽快回复你
    • @user1342164 如果对您有帮助,请为未来的用户投票 :)
    猜你喜欢
    • 2017-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-01
    • 2011-11-21
    • 2017-12-01
    • 2017-09-26
    相关资源
    最近更新 更多