2013-06-03 103 views
2

我尝试使用AutoCompleteExtender,但它不起作用。我使用ajaxToolkit和Web服务文件。他们都没有错误。我认为脚本可能是错误的,请给我建议修复。asp.net ajaxtoolkit自动完成不起作用

< ajaxToolkit:AutoCompleteExtender 
          runat="server" 
          BehaviorID="AutoCompleteEx" 
          ID="autoComplete1" 
          TargetControlID="TextBox" 
          ServicePath="AutoComplete.asmx" 
          ServiceMethod="GetCompletionList" 
          MinimumPrefixLength="2" 
          CompletionInterval="1000" 
          EnableCaching="true" 
          CompletionSetCount="20" 
          CompletionListCssClass="autocomplete_completionListElement" 
          CompletionListItemCssClass="autocomplete_listItem" 
          CompletionListHighlightedItemCssClass="autocomplete_highlightedListItem" 
          DelimiterCharacters=";, :" 
          OnClientShowing="true" > 
            <Animations> 
           <OnShow> 
            <Sequence> 

             <OpacityAction Opacity="0" /> 
             <HideAction Visible="true" /> 


             <ScriptAction Script=" 
              // Cache the size and setup the initial size 
              var behavior = $find('AutoCompleteEx'); 
              if (!behavior._height) { 
               var target = behavior.get_completionList(); 
               behavior._height = target.offsetHeight - 2; 
               target.style.height = '0px'; 
              }" /> 


             <Parallel Duration=".4"> 
              <FadeIn /> 
              <Length PropertyKey="height" StartValue="0" EndValueScript="$find('AutoCompleteEx')._height" /> 
             </Parallel> 
            </Sequence> 
           </OnShow> 
           <OnHide> 

            <Parallel Duration=".4"> 
             <FadeOut /> 
             <Length PropertyKey="height" StartValueScript="$find('AutoCompleteEx')._height" EndValue="0" /> 
            </Parallel> 
           </OnHide> 
          </Animations> 
          </ajaxToolkit:AutoCompleteExtender> 

AutoComplete.asmx:

public string[] GetCompletionList(string prefixText, int count) 
    { 


     SqlConnection cn = new SqlConnection(ConfigurationManager.AppSettings["U"].ToString()); 
     DataSet ds = new DataSet(); 
     DataTable dt = new DataTable(); 

     SqlCommand cmd = new SqlCommand(); 
     cmd.Connection = cn; 
     cmd.CommandType = CommandType.Text; 

     cmd.CommandText = "select * from Stoc WITH (NOLOCK) where KeySentences like @myParameter"; 
     cmd.Parameters.AddWithValue("@myParameter", "%" + prefixText + "%"); 
     try 
     { 
      cn.Open(); 
      cmd.ExecuteNonQuery(); 
      SqlDataAdapter da = new SqlDataAdapter(cmd); 
      da.Fill(ds); 
     } 
     catch (Exception ex) 
     { 

     } 
     finally 
     { 
      cn.Close(); 
     } 
     dt = ds.Tables[0]; 

     //Then return List of string(txtItems) as result 
     List<string> txtItems = new List<string>(); 
     String dbValues; 

     foreach (DataRow row in dt.Rows) 
     { 
      //String From DataBase(dbValues) 
      dbValues = row["KeySentences"].ToString(); 
      dbValues = dbValues.ToLower(); 
      txtItems.Add(dbValues); 

     } 

     return txtItems.ToArray(); 

    } 

谢谢您的回答..

+0

你确定没有错误吗?你确定你收到任何数据吗?这个空的“catch”块可能会导致你错过正在发生的任何错误。设置一个断点,看看你是否在“catch”块中得到错误,如果没有,你是否从数据库调用中得到任何回应。 – jadarnel27

+0

打开Chrome的开发工具'** console **并查看,是否有任何错误? –

回答

0

我对这个性质我ajaxtoolkit4.5误差测试。

OnClientShowing="true"

不确定你想要做什么,但为我删除这项工作。 (我通过删除数据库连接和工作来复制你的代码)