AJAX 自动建议文本框用户控件
一个具有自动建议功能的 AJAX 文本框用户控件。
引言
本文档介绍了如何开发一个启用 AJAX 的文本框,它作为一个自动建议文本框,使用回调事件处理程序。
在本文中,我创建了一个带有文本框的用户控件。当你在文本框中输入内容时,它将转到服务器端(数据库等)并根据你的文本框输入获取结果并在 div 中显示它。
使用代码
在本节中,我将解释如何创建自动建议文本框。
我首先创建一个带有文本框和 div 元素的用户控件。在文本框的 onkeyup 事件中,调用一个 JavaScript 函数。使用回调事件处理程序,它调用服务器端方法以根据文本框中输入的内容过滤结果。在用户控件服务器端,你需要添加代码从 DataSet 获取数据,并使用 ds.getxml() 方法将其转换为 XML 字符串。在客户端,XML 字符串使用 XSL 转换转换为 HTML 表格,转换后的数据在动态 div 标签中显示。
这是 ASP.NET 代码
<!--.ascx -->
<script type="text/javascript" src="Common.js"></script>
    
<table >
    <tr>
        <td>        
            <asp:TextBox ID="txtCust" runat="server" ></asp:TextBox>
            <div id="txtDiv" runat="server">
            </div>
        </td>
    </tr>
    <tr>
        <td>
        <div id="myDiv"></div>
            <asp:HiddenField ID="hdnType" runat="server" />
        </td>
     </tr>
     
</table>
这是代码隐藏文件
//.ascx.cs
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class CustomTextBox : System.Web.UI.UserControl, ICallbackEventHandler
{
    string callbackResult;
    public void SetClassType(string clstype)
    {
        hdnType.Value = clstype;
    }
   
    protected void Page_Load(object sender, EventArgs e)
    {
        txtCust.Attributes.Add("onkeyup", 
                "ShowMatchings('" + this.ClientID + "');");
        txtCust.Attributes.Add("onblur", "onBlur();"); 
        String cbReference = Page.ClientScript.GetCallbackEventReference(this, 
               "arg", "onCallbackComplete",null,true);
        String callbackScript = "function DoClientCallBack(arg)" + 
               "{ " + cbReference + ";}";        
        Page.ClientScript.RegisterClientScriptBlock(this.GetType(),
        "CallServer", callbackScript, true);
    }
    #region ICallbackEventHandler Members
    public string GetCallbackResult()
    {
        return callbackResult;
    }
    public void RaiseCallbackEvent(string eventArgument)
    {
        try
        {
            callbackResult = xmlResult(eventArgument);
        }
        catch (Exception e)
        {
            Trace.Write(e.Message);
            throw new Exception("Error checking quantity");
        }
    }
    string xmlResult(string Filter)
    {
        DataSet ds = new DataSet();       
        string[] str = Filter.Split('~');
        return "<?xml version='1.0' standalone='yes'?>" + 
               GetResult(resultDS(str[1]), str[0]) ;
    }
    DataSet resultDS(string clsType)
    {
        if (clsType == "City")
        {
            Cities ct = new Cities();
            return ct.GetData();
        }
        else
        {
            World wl = new World();
            return wl.GetData();
        }
    }
    string GetResult(DataSet ds,string Filter)
    {
        DataView dv = ds.Tables[0].DefaultView;
        dv.RowFilter = "Name like '" + Filter + "%'";
        ds.Tables.Clear();
        ds.Tables.Add(dv.ToTable());
        ds.AcceptChanges();
        return ds.GetXml() +"~_~"+ ds.Tables[0].Rows.Count;
    }
    #endregion
}
将用户控件添加到你的项目中,并将其引用添加到你的页面。




