65.9K
CodeProject 正在变化。 阅读更多。
Home

AJAX 自动建议文本框用户控件

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.82/5 (10投票s)

2008年6月13日

CPOL

1分钟阅读

viewsIcon

47026

downloadIcon

599

一个具有自动建议功能的 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
}

将用户控件添加到你的项目中,并将其引用添加到你的页面。

© . All rights reserved.