Ajax自动完成扩展器和获取选定项的ID?

6

我正在使用自动完成扩展程序,在用户输入时建议名称。如何在用户选择项目后获取选择值?我猜我可以使用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>
2个回答

6

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

在这里,“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"


这是一个很好的答案,但也请参考这个链接 - Homer

0

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
}

某些原因,自动完成选择时文本更改事件不会触发。 - user1342164
Karl比我先回答了,所以我会在下面添加我的答案:TextBox有一个TextChanged事件,你可以尝试去处理它。根据我的经验,它并不是很有用,因为它只会在用户切换文本框时触发(而不是在每个字符输入时触发)。但这可能适合你的情况。 - Garrison Neely
1
@user1342164 - AutoPostBack 属性必须为 true 才能触发事件,请参见上面编辑过的代码。 - Karl Anderson
请查看我的上面的评论--它应该在焦点离开文本框时触发。如果这对您不起作用,您有两个选择:JavaScript和jQuery或添加一个“选择”按钮,其事件可以处理,然后访问文本框的值。 - Garrison Neely
问题在于,它在扩展器上有一个滚动条,当您滚动时,它会触发文本更改事件。 - user1342164

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接