ASP.NET 中的 Ajax 自动完成






4.78/5 (25投票s)
ASP.NET 中的 Ajax 自动完成
无需使用 AjaxControlToolKit,我们可以使用纯 Ajax 调用来实现自动完成扩展器。本文档解释了如何制作自动完成扩展器。
OnKeyUp
事件帮助您通过 Ajax 调用从数据库中获取数据。这里,一个Handler.ashx 处理来自客户端的 AJAX 请求。我添加了一个类文件来处理数据库操作,以获得更好的编码实践。下面,我解释数据库助手 Class
。Class
有一个方法
GetTable(string sqlQuery)
这返回一个 DataTable
,在从数据库中获取数据之后。还包括 Provide
类,该类帮助获取 SqlConnection 字符串
。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.SqlClient;
using System.Configuration;
using System.Data;
/// <summary>
/// Summary description for DBHelper
/// </summary>
public class DBHelper
{
SqlConnection connection;
SqlDataAdapter adapter;
SqlCommand command;
DataTable dataTable;
public DBHelper()
{
}
/// <summary>
///
/// </summary>
/// <param name="sqlQuery">passing SQL Query here
/// <returns>DataTable object is returned</returns>
public DataTable GetTable(string sqlQuery)
{
//creating new instance of Datatable
dataTable = new DataTable();
connection = Provider.GetConnection();
command = new SqlCommand(sqlQuery, connection);
//Open SQL Connection
connection.Open();
try
{
adapter = new SqlDataAdapter(command);
adapter.Fill(dataTable);
}
catch
{ }
finally
{
//Closing Sql Connection
connection.Close();
}
return dataTable;
}
}
public class Provider
{
public static SqlConnection GetConnection()
{
//creating SqlConnection
return new SqlConnection(ConfigurationManager.AppSettings["sqlConn"]);
}
}
现在我们可以查看Handler 文件。当从客户端的 Ajax 调用接收到请求时,它将数据传递到我们的数据库助手类,handler 文件将数据保存在 DataTable
中。结果数据以表格形式格式化并写入上下文。我们可以添加 JavaScript 函数来选择数据,这里 api_helper.AddtoTaxtBox(selectedItem)
管理客户端数据部分。
检查 Handler 文件
<%@ WebHandler Language="C#" Class="Handler" %>
using System;
using System.Web;
using System.Data;
public class Handler : IHttpHandler {
public void ProcessRequest (HttpContext context) {
HttpRequest request = HttpContext.Current.Request;
//checking string null or empty
if (!string.IsNullOrEmpty(request.QueryString["name"]))
{
string name=request.QueryString["name"];
//creating instance of new database helper
DBHelper objDBHelper = new DBHelper();
//creating Sql Query
string sqlQuery = string.Format
("SELECT Name FROM User WHERE Name LIKE '{0}%'", name);
//filling data from database
DataTable dataTable = objDBHelper.GetTable(sqlQuery);
string table = string.Empty;
//table for hold data
table = "<table width='100%'>";
string td = string.Empty;
//checking datatable
if (dataTable.Rows.Count > 0)
{
for (int i = 0; i < dataTable.Rows.Count; i++)
{
//adding table rows
td += string.Format("<tr><td class='select'
onclick='api_helper.AddtoTaxtBox(this.innerHTML)'>
{0}</td></tr>", dataTable.Rows[i][0].ToString());
}
}
table += td + "</table>";
context.Response.Write(table);
}
}
public bool IsReusable {
get {
return false;
}
}
}
现在我们可以检查 Ajax 的工作原理。在 Textbox onKeyUp
事件中,调用 Ajax 代码。它使用 Ajax 将输入的值发送到服务器,结果在搜索 textbox
下方的 div
控件中显示。
<%@ Page Language="C#" AutoEventWireup="true"
CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:TextBox ID="txtName" runat="server"
onkeyup="api_helper.callAjax();"></asp:TextBox>
<div id="myDiv"></div>
</div>
<script language="javascript" type="text/javascript">
if (typeof (api_helper) == 'undefined') { api_helper = {} }
api_helper.doAjax = function(HandlerUrl, displayDiv) {
var Req; try { Req = new XMLHttpRequest(); }
catch (e) { try { Req = new ActiveXObject("Msxml2.XMLHTTP"); }
catch (e) { try { xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); }
catch (e) { return false; } } } Req.onreadystatechange = function() {
if (Req.readyState == 4) { var d = document.getElementById(displayDiv);
d.innerHTML = Req.responseText; } }
Req.open("GET", HandlerUrl, true); Req.send(null);
}
api_helper.callAjax = function() {
var text = document.getElementById("txtName").value;
if (text != "") {
var requestUrl = "Handler.ashx?name=" + text;
var displayDiv="myDiv";
api_helper.doAjax(requestUrl, displayDiv);
}
}
api_helper.AddtoTaxtBox = function(txt) {
document.getElementById("txtName").value = txt;
document.getElementById("myDiv").innerHTML = "";
}
</script>
</form>
</body>
</html>
示例
感谢阅读本文。请随时发表评论。
标签:Ajax 自动完成,Ajax 示例。