2012-06-08 4 views
0

Попытка получить автозаполнение, чтобы работать с текстовым полем, но кажется, что метод позади кода никогда не срабатывает. Может ли кто-нибудь увидеть проблему снизу? Я пробовал различные образцы/учебные пособия.ajaxtoolkit AutoCompleteExtender не работает

<asp:ScriptManager ID="SM1" runat="server"></asp:ScriptManager> 
    <asp:UpdatePanel ID="UpdatePanel" runat="server"> 
     <ContentTemplate> 
      <asp:TextBox ID="txtUserName" runat="server"></asp:TextBox> 
      <ajaxToolkit:AutoCompleteExtender ID="AutoCompleteExtender1" runat="server" TargetControlID="txtUserName" ServiceMethod="GetCompletionList" 
      MinimumPrefixLength="2" CompletionInterval="10" EnableCaching="true" CompletionSetCount="3" UseContextKey="True"> 
      </ajaxToolkit:AutoCompleteExtender> 
     </ContentTemplate> 
    </asp:UpdatePanel> 

код позади:

[System.Web.Services.WebMethodAttribute(), System.Web.Script.Services.ScriptMethod()] 
public static string[] GetCompletionList(string prefixText, int count, string contextKey) 
{ 
    string connectionString = ConfigurationManager.ConnectionStrings["WMSDatabase"].ConnectionString; 
    SqlConnection conn = new SqlConnection(connectionString); 
    // Try to use parameterized inline query/sp to protect sql injection 
    SqlCommand cmd = new SqlCommand("SELECT TOP " + count + " Alias FROM dbo.Users WHERE Alias LIKE '" + prefixText + "%'", conn); 
    SqlDataReader oReader; 
    conn.Open(); 
    List<string> CompletionSet = new List<string>(); 
    oReader = cmd.ExecuteReader(CommandBehavior.CloseConnection); 
    while (oReader.Read()) 
    CompletionSet.Add(oReader["Alias"].ToString()); 
    return CompletionSet.ToArray(); 
} 

ответ

2

Попробуйте удалить панель обновления из вашего кода:

<asp:ScriptManager ID="SM1" EnablePageMethods="true" runat="server"></asp:ScriptManager> 
      <asp:TextBox ID="txtUserName" runat="server"></asp:TextBox> 
      <ajaxToolkit:AutoCompleteExtender ID="AutoCompleteExtender1" runat="server" TargetControlID="txtUserName" ServiceMethod="GetCompletionList" 
      MinimumPrefixLength="2" CompletionInterval="10" EnableCaching="true" CompletionSetCount="3" UseContextKey="True"> 
      </ajaxToolkit:AutoCompleteExtender> 
+0

Я фактически следовал этот пример здесь: Http: //www.ajaxprojects. com/ajax/tutorialdetails.php? itemid = 777 на новом пустом веб-сайте, и это действительно работает! Единственное, что не работает в моем текущем проекте, это то, что когда я нажимаю текстовое поле и выбираю метод «Добавить метод автозаполнения», я получаю «Невозможно создать метод страницы« GetCompletionList », потому что CodeBehind или CodeFile не было найдено!» что, конечно же, неверно. –

+0

Вы были правы, спасибо, Это было из-за UpdatePanel. Прекрасно работает. Последний вопрос, если записи не найдены, я знаю, что я могу вернуть строку [] с «Нет записей». но как сделать так, чтобы вы не могли на самом деле щелкнуть текст «Нет записей», чтобы он не заполнил текстовым полем этим? –

+0

Кроме того, если вы используете PageMethods, установите EnablePageMethods = "true" в вашем диспетчере скриптов. –

Смежные вопросы