【问题标题】:Ajax autocomplete extender and get ID of selected item?Ajax 自动完成扩展器并获取所选项目的 ID?
【发布时间】:2013-06-25 08:26:10
【问题描述】:

我正在使用自动完成扩展器在用户键入时建议名称。用户选择项目后如何获取选择值?我想我可以使用 onclientitemselected 但我不熟悉如何写这个?我需要根据 autocompleteextender 文本框中的选择填充一个文本框。谢谢

 <asp:TextBox ID="TextBox1" runat="server" Height="27px" Width="570px"></asp:TextBox>
        <asp:AutoCompleteExtender ID="AutoCompleteExtender" runat="server" 
    DelimiterCharacters="" Enabled="True" ServicePath="AutoComplete.asmx"  
    ServiceMethod="GetCompletionList" TargetControlID="TextBox1" 
    MinimumPrefixLength="2" UseContextKey="true" ContextKey="StateDropDown" 
            CompletionListElementID="autocompleteDropDownPanel">
</asp:AutoCompleteExtender>

【问题讨论】:

    标签: asp.net ajax ajaxcontroltoolkit


    【解决方案1】:

    为此,您需要从带有 ID 和文本的 Web 服务方法返回列表

    此处“lst” 是包含来自您的数据源的数据的实际列表。

    List<string> items = new List<string>(count);
            for (int i = 0; i < lst.Count; i++)
            {
                string str =AjaxControlToolkit.AutoCompleteExtender.CreateAutoCompleteItem(lst[i].Text,Convert.ToString(lst[i].IDValue));                
                items.Add(str);
    
            }
            return items.ToArray();
    

    然后是简单的javascript

    function GetID(source, eventArgs )
        {
            var HdnKey = eventArgs.get_value();
            document.getElementById('<%=hdnID.ClientID %>').value = HdnKey;
        }
    

    并且不要忘记在自动完成扩展器中设置属性 OnClientItemSelected="GetID"

    【讨论】:

    • 这是一个很好的答案,但另请参阅this
    【解决方案2】:

    AutoCompleteExtender 只是扩展了 ASP.NET 的 TextBox 控件,因此如果您想知道文本何时更改,只需在 TextBox 控件上引发 TextChanged 事件,如下所示:

    Markup:
    <asp:TextBox ID="TextBox1" runat="server" Height="27px" Width="570px" OnTextChanged="TextBox1_TextChanged" AutoPostBack="true"></asp:TextBox>
    
    Code-Behind:
    protected void TextBox1_TextChanged(object sender, EventArgs e)
    {
        // Do something here with textbox value
    }
    

    【讨论】:

    • 由于某种原因,文本更改事件不会在自动完成选择上触发
    • Karl 打败了我,所以我将在下面添加我的答案:TextBox 有一个 TextChanged 事件,您可以尝试处理。根据我的经验,它并不是很有用,因为它仅在用户开箱即用选项卡后触发(而不是在每个字符输入上)。但这可能对你有用。
    • @user1342164 - AutoPostBack 属性必须为真才能触发事件,请参阅上面的编辑代码。
    • 查看我上面的评论——一旦焦点离开文本框,它就会触发。如果这对您不起作用,您有两个选择:JavaScript 和 jQuery,或者添加一个“选择”按钮,您可以处理其事件,然后访问文本框的值。
    • 这个问题,虽然它在扩展器上有一个滚动条,当你滚动它时会触发文本更改事件
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-22
    • 2012-10-07
    • 2011-09-19
    • 2011-12-07
    • 2013-11-06
    • 2013-09-15
    • 1970-01-01
    相关资源
    最近更新 更多