文本框与自动完成

问题描述:

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

问候,

西蒙

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

是的,你可以标记的代码隐藏文件作为一个WebMethod的方法:

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,它本质上是一个数据绑定自动完成控制。

你不需要为了提供自动完成功能的文本框来实现一个单独的Web服务,但是,你需要提供自动完成扩展使用有效的Web方法之能用来调用来检索匹配条目的列表。

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

如果您省略了ServicePath属性,则AJAX框架将尝试在您的实际网页中的代码中找到ServiceMethod Web方法,并在其上放置文本框和自动完成扩展器。这通常在“代码隐藏”文件中。

AutoComplete Sample页:

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

[System.Web.Services.WebMethod]
[System.Web.Script.Services.ScriptMethod]
公共字符串[] GetCompletionList(串prefixText,诠释计数)
{...}

注意,您可以用 您选择的名称替换 “GetCompletionList”,但返回类型和参数 名称和类型必须完全 匹配,包括大小写。

  • ServicePath - 扩展器将从中拉出单词\句子完成的Web服务的路径。 如果没有提供,服务方法应该是一个页面方法。
+0

啊啊啊!非常感谢,它帮了我很多。我正在尝试...... heum,RIGHT NOW :)! – 2009-07-27 14:29:39

+0

非常感谢它的工作正常 – subramani 2013-03-12 09:15:04

如果你不介意使用一些JavaScript,让你的手有点有点脏,那么你可以使用自动完成插件的jQuery或原型,然后你可以使用页面返回数据或Web服务。见jqery AutoComplete demo

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

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" }; 
    } 

} 

但是,当我在文本框中我打字,没有什么出...哼哼。不知道该怎么办。