为什么AutoCompleteExtender会触发Page_Load事件而不是服务方法?

时间:2014-04-22 09:51:15

标签: c# asp.net ajaxcontroltoolkit autocompleteextender

所以我试图从AJAX Control Toolkit实现AutoCompleteExtender工具。

以下是我的ASPX页面上AutoCompleteExtender的实现:

<asp:TextBox runat="server" ID="CustomerTextBox" CssClass="form-control" AutoComplete="off" />
<asp:RequiredFieldValidator runat="server" ControlToValidate="CustomerTextBox"
    CssClass="text-danger" ErrorMessage="The Customer field is required." Display="None" />
<ajaxToolkit:AutoCompleteExtender ID="CustomerAutoCompleteExtender" runat="server" TargetControlID="CustomerTextBox"
    MinimumPrefixLength="1" EnableCaching="true" CompletionSetCount="1" CompletionInterval="1000" 
    ServiceMethod="GetAllCustomerNames">
</ajaxToolkit:AutoCompleteExtender>

这是代码隐藏文件中实现的服务方法:

[System.Web.Services.WebMethod()]
[System.Web.Script.Services.ScriptMethod()]
public static string[] GetAllCustomerNames(string prefixText, int count)
{

    List<string> allCustomerNames = new List<string>();
    List<Customer> allCustomers = GetAllCustomers();

    foreach (Customer customer in allCustomers)
    {
        if (customer.CustomerName.Contains(prefixText))
        {
            allCustomerNames.Add(customer.CustomerName);
        }
    }

    return allCustomerNames.ToArray();
}

我面临的问题是每当我在文本框中输入一个字符时,就会触发Page_Load事件而不是 GetAllCustomerNames 方法。有人可以帮我找到我出错的地方吗?

其他信息:

  • 我使用的是Visual Studio 2013。
  • 这是在.NET 4.5上运行的ASP.NET Web窗体应用程序。
  • 我使用默认样式和模板,就像创建新项目时一样,因此正在使用母版页。
  • ToolkitScriptManager 在主文件中指定,我已将 EnablePageMethods 属性设置为true。

1 个答案:

答案 0 :(得分:0)

尝试[System.Web.Services.WebMethod]而非WebMethod()并删除下一行。

您在TextBox上设置AutoPostBack="true",只需删除AutoPostBack或将其设置为false