Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net Ajax自动完成扩展程序并获取所选项目的ID?_Asp.net_Ajax_Ajaxcontroltoolkit - Fatal编程技术网

Asp.net Ajax自动完成扩展程序并获取所选项目的ID?

Asp.net Ajax自动完成扩展程序并获取所选项目的ID?,asp.net,ajax,ajaxcontroltoolkit,Asp.net,Ajax,Ajaxcontroltoolkit,当用户键入时,我使用自动完成扩展程序来建议名称。用户选择项目后如何获取选择值?我想我可以使用onclientemselected,但我不熟悉如何写这个?我需要根据AutoCompleteXtender文本框中的选择填充文本框。多谢各位 <asp:TextBox ID="TextBox1" runat="server" Height="27px" Width="570px"></asp:TextBox> <asp:AutoCompleteExtend

当用户键入时,我使用自动完成扩展程序来建议名称。用户选择项目后如何获取选择值?我想我可以使用onclientemselected,但我不熟悉如何写这个?我需要根据AutoCompleteXtender文本框中的选择填充文本框。多谢各位

 <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>

AutoCompleteXtender仅扩展了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
}
标记:
代码隐藏:
受保护的void TextBox1\u TextChanged(对象发送方,事件参数e)
{
//使用textbox值在此处执行某些操作
}

为此,您需要使用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();
列表项=新列表(计数);
对于(int i=0;i
然后是简单的javascript

function GetID(source, eventArgs )
    {
        var HdnKey = eventArgs.get_value();
        document.getElementById('<%=hdnID.ClientID %>').value = HdnKey;
    }
函数GetID(源、事件参数)
{
var HdnKey=eventArgs.get_value();
document.getElementById(“”).value=HdnKey;
}
不要忘记在自动完成扩展程序中设置属性
OnClientItemSelected=“GetID”

文本更改事件不会在自动完成选择时触发,因为某些原因,Karl击败了我,因此我将在下面添加我的答案:
TextBox
有一个
TextChanged
事件,您可以尝试处理。根据我的经验,它不是很有用,因为它只在用户制表符弹出框(而不是每个字符输入)后触发。但这可能对您有用。@user1342164-
AutoPostBack
属性必须为true才能激发事件,请参阅上面编辑的代码。请参阅上面的我的注释——焦点离开文本框后,它应该激发。如果这对您不起作用,您有两个选项:JavaScript和jQuery,或者添加一个“选择”按钮,您可以处理该按钮的事件,然后访问文本框的值。问题在于,它在扩展器上有一个滚动条,当您滚动时,它会触发文本更改事件。这是一个很好的答案,但请参见