与AutoCompleteExtender一起使用时,OnTextChanged无法正常工作

时间:2015-01-19 07:39:30

标签: c# asp.net

我有一个文本框,如下所示:

Search:<asp:TextBox runat="server" ID="txtSearchCompany" AutoPostBack="true" OnTextChanged="txtSearchCompany_TextChanged"></asp:TextBox>

我还有一个AutoCompleteExtender与文本框相关联,如下所示:

<cc1:AutoCompleteExtender ServiceMethod="SearchCustomers" 
            MinimumPrefixLength="2"
            CompletionInterval="100" EnableCaching="false" CompletionSetCount="10" 
            TargetControlID="txtSearchCompany"
            ID="AutoCompleteExtender1" runat="server" 
           CompletionListElementID="autocompleteDropDownPanel"
            >
</cc1:AutoCompleteExtender>

当我从AutoComplete列表中选择某些内容时,它不会触发onTextChanged事件。但是,如果我在文本框中输入内容而我没有从AutoComplete列表中选择一个值,则会触发onTextChanged

有人可以告诉我这是怎么回事吗?

由于

2 个答案:

答案 0 :(得分:1)

据我所知,自动完成逻辑和文本框控件,它们都不会像你期望的那样一起工作,因为OnTextChanged事件只在文本框中输入/更改某些内容时触发。尽管从自动完成下拉列表中选择了不同的值,但此事件无法正常工作。

有这个链接,不是确切的,但也指向同一个方向。 Check this.

可能有一些解决方法可以通过这种解决方法从下拉列表中选择值时触发事件。

您可以尝试在JavaScript / jQuery中编写ajax事件,该事件会在服务器上触发事件,然后您可以在服务器上执行逻辑并通过脚本返回数据作为响应。

以此为例:

Event Change with Jquery

这是示例代码:

function autocomplete() {
  $('.control').autocomplete({
      source: function (request, response) {
         // ajax code to perform textChange logic
      },
      minLength: 1,
      change: function (event, ui) { SaveData(); }
  });
}

希望这有帮助。

答案 1 :(得分:0)

使用客户端脚本中的 OnClientItemSelected 事件触发TextChanged事件

<cc1:AutoCompleteExtender ServiceMethod="SearchCustomers" 
        MinimumPrefixLength="2"
        CompletionInterval="100" 
        EnableCaching="false" 
        CompletionSetCount="10" 
        TargetControlID="txtSearchCompany"
        ID="AutoCompleteExtender1" runat="server" 
        CompletionListElementID="autocompleteDropDownPanel"
        OnClientItemSelected="DoTextChangedPostBack" >
</cc1:AutoCompleteExtender>

<script type="text/javascript" language="javascript">
   function DoTextChangedPostBack(source, eventArgs) {
       var hfield = $get('<%=txtSearchCompany.ClientID%>');
       hfield.value = eventArgs.get_value();
       __doPostBack("<%=txtSearchCompany.ID%>", "TextChanged");
    }
</script>