Contact Name:<asp:TextBox ID="txtName" runat="server"></asp:TextBox>
其次,添加一个 AutoCompleteExtender 控件
。它扩展文本框使之具有自动完成的功能。技巧是
建议列表从一个 Web 方法获取,而你需要创建这个方法
。假设已经创建了一个叫做 AutoCompleteService 的Web 服务,其中有一个 GetNames()方法,它提供建议列表:
[WebService]
[System.Web.Script.Services.ScriptService]
public class AutoCompleteService : System.Web.Services.WebService
[WebMethod]
public List<string> GetNames(string prefixText, int count)
{ ... }
下面是调用这个服务需要的标签:
<asp:AutoCompleteExtender ID="AutoCompleteExtender1" runat="server" TargetControlID="txtName"
ServicePath="~/AutoCompleteService.asmx" ServiceMethod="GetNames" MinimumPrefixLength="1">
</asp:AutoCompleteExtender>
假定在 Web 表单顶部注册了命名空间(拖动组件至页面会自动注册):
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="asp" %>
AutoCompleteExtender 使用
TargetControlID
属性关联相应的服务器控件。使用
ServicePath
和
ServiceMethod
属性指定服务和具体方法,使用
MinimumPrefixLength
属性限定等待用户输入特定数目的字母,然后才提供建议列表。如果列表很长,以至单个字符不能提供有效建议时,这个属性很有用。
代码获取可能建议的完整列表,并缓存1小时以保证速度。下面是 Web 方法的完整代码:
[WebMethod]
public List<string> GetNames(string prefixText, int count)
if (Context.Cache["NameList"] == null)
Context.Cache.Insert("NameList", QueryNames(), null,
DateTime.Now.AddMinutes(60), TimeSpan.Zero);
SqlCommand cmd = new SqlCommand("select ContactName from Customers order by ContactName", conn);
List<string> names = new List<string>();
conn.Open();
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
names.Add(reader["ContactName"].ToString());
reader.Close();
catch (Exception ex)
throw new ApplicationException("Data execute error:" + ex.Message);
finally
conn.Close();
return names;
ASP.NET AJAX 最精彩的特性是它并不只是一个 JavaScript 库或者一个简化回调的 .NET 组件,而是一个多层的平台,让你能够创建更具有响应性且更动态的页面。
可以在 3 个不同层次使用 ASP.NET AJAX 框架:
可以编写自己的 JavaScript 代码来调用服务器端功能。这种情况下,公开需要的 Web 方法并通过自动生成的 JSON 代理调用它们。
可以继续使用普通的 ASP.NET 服务器控件,但利用 ASP.NET AJAX 组件(如 UpdatePanel)或使用时髦的新控件和控件扩展器(包括在 ASP.NET AJAX 控件工具包)扩展它们。这种方法的作用非常大,且不需要太多的工作,也不会给项目带来很大复杂性。
可以创建自己的客户端组件、控件和行为,可以单独或结合自定义的 ASP.NET 服务器控件使用它们。
这是目前最复杂的方式了
。
想要真正掌握它,必须非常清楚的了解客户端 ASP.NET AJAX 模型,这几乎是一个独立的平台。也就是说,需要深入挖掘 ASP.NET AJAX 的文档,或者钻研这方面的书籍
。