具有自动完成功能的文本框

时间:2009-07-27 14:07:48

标签: c# asp.net entity-framework autocomplete ajaxcontroltoolkit

我正在使用Visual Studio 2008进行编程,并使用带有C#的.NET Framework 3.5制作Web应用程序。所有DAL都与强大的实体框架包装器链接(类似于VS.net 2010将使用的那个。)我有一个用于搜索first和lastname的文本框。我遇到的问题是我正在使用AJAX Control Toolkit 2.0,它提供了一个Auto complete extender,但是,通过使用WebServices(asmx)。有没有其他方法可以在不使用Web服务的情况下使用自动完成功能?

此致

西蒙

P.s。:对不起我的英语,我尽我所能:)!

4 个答案:

答案 0 :(得分:7)

您无需实施单独的网络服务即可为文本框提供自动完成功能,但 需要为自动填充扩展程序提供有效的可以用来调用匹配条目列表的Web方法

AutoComplete Extender控件的AutoComplete功能的关键属性是ServiceMethod和ServicePath属性。 ServiceMethod指定由AJAX框架调用以检索自动完成下拉列表的匹配项的 Web方法的名称,ServicePath属性指定将包含该文件的文件的完整路径和文件名。 ServiceMethod属性的方法。请注意,ServicePath属性是可选的。

如果省略ServicePath属性,AJAX框架将尝试在实际网页的代码中找到ServiceMethod Web方法,文本框和自动填充扩展程序位于该网页中。这通常是在“代码隐藏”文件中。

来自AutoComplete Sample页面:

  
      
  • ServiceMethod - 要调用的Web服务方法。签名   此方法必须符合以下条件:
  •   
     

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

     

请注意,您可以替换   “GetCompletionList”,名称为   你的选择,但返回类型和   参数名称和类型必须完全正确   匹配,包括案例。

     
      
  • ServicePath - 扩展程序将从中提取单词\ _句子完成的Web服务的路径。   如果未提供,则服务方法应为页面方法。
  •   

答案 1 :(得分:5)

是的,您可以将代码隐藏文件中的方法标记为web方法:

   public partial class Products : System.Web.UI.Page 
   { 
     [System.Web.Services.WebMethod()] 
      [System.Web.Script.Services.ScriptMethod()] 
      public static string[] GetTerms(string prefix) 
      {
        // Put your logic here
      }
   }

请参阅ASP.NET AJAX callbacks to Web Methods in ASPX pages

此外,如果您使用NET 3.5,您可以使用后面的工具包,其中包含the ComboBox,它本质上是一个数据绑定自动完成控件。

答案 2 :(得分:1)

如果你不介意使用一些JavaScript并且让你的手有点脏,那么你可以使用jQuery或Prototype的自动完成插件,然后你可以使用一个页面来返回数据或Webservice。见jqery AutoComplete demo

答案 3 :(得分:0)

好的......也许我只是不明白这个控制是如何工作的。这是我的代码:

Default.aspx的

    <asp:ScriptManager ID="ScriptManager1" runat="server" />
    <asp:TextBox ID="TextBox1" runat="server" />
    <cc1:AutoCompleteExtender ID="AutoCompleteExtender1" runat="server" 
        ServiceMethod="GetCompletionList" ServicePath="Codes/Utility.cs" 
        TargetControlID="TextBox1" UseContextKey="True" CompletionInterval="100" 
        MinimumPrefixLength="1">
    </cc1:AutoCompleteExtender>

〜/代码/ Utility.cs

    public class Utility {

    [System.Web.Services.WebMethod]
    [System.Web.Script.Services.ScriptMethod]
    public string[] GetCompletionList(string prefixText, int count) {
        return new string[] { "Bruno", "Simon", "Joanie", "Noémie", "Johanne", "Serge", "France", "Jacques", "Mylène" };
    }

}

但是当我在文本框中输入时,没有任何显示...哼。不知道该怎么做。