AutoCompleteExtender提供了类似百度的模糊查询列表
小弟使用它搞了一个“根据用户已经输入的内容”列表中列出从数据库中获得模糊查询的需求(由于刚开始接触Js,大家体谅了啊)
仅仅是上面的结果 也就不卖弄了 网上有很多 关键在于我从列表中获得的结果需要经过处理 放到文本框中 呵呵 其它的不说了 具体看代码吧
总体来说有两个扩展需求:
1.一个界面中放两个这样的东东,如果直接放得话 其中一个会不起作用 尤其是放到GridView中的编辑模板中,找这个ID就很难了
2.在提示框中选择了一项后 需要把该项处理后放到文本框中
封装了一个用户控件 如下:
界面
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Mytxt.ascx.cs" Inherits="WebMemberManage.WebUserControl.Mytxt" %>
<script type="text/javascript">
function itemSelected(source, eventArgs)
{
var txtManager = document.getElementById(source.get_element().id); //获得当前编辑的对象
txtManager.value=txtManager.value.split('(')[0];
var a=document.getElementById("<%=lkb_Submit.ClientID %>");
if(a==null)
{
return;
}
a.click();
}
</script>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:TextBox ID="txtManager" runat="server" Width="350px"></asp:TextBox>
<asp:LinkButton
ID="lkb_Submit" runat="server" οnclick="lkb_Click"></asp:LinkButton>
<cc1:AutoCompleteExtender ID="txtManager_AutoCompleteExtender" runat="server" TargetControlID="txtManager"
ServicePath="~/MyWebService.asmx" ServiceMethod="GetSimilarMemberByName" MinimumPrefixLength="1"
CompletionSetCount="10" EnableCaching="true" CompletionInterval="5" OnClientItemSelected="itemSelected">
</cc1:AutoCompleteExtender>
</ContentTemplate>
</asp:UpdatePanel>
界面代码
using System;
namespace WebMemberManage.WebUserControl
{
public delegate void MyDel();
[System.Web.Script.Services.ScriptService]
public partial class Mytxt : System.Web.UI.UserControl
{
/// <summary>
/// 选择完成后触发的事件
/// </summary>
public event MyDel GetText;
protected void lkb_Click(object sender, EventArgs e)
{
if (GetText != null)
GetText();
}
protected void Page_Load(object sender, EventArgs e)
{
}
public string Text
{
get
{
return txtManager.Text;
}
set
{
txtManager.Text = value;
}
}
}
}
Webservice代码
[WebService(Namespace = "MemberManager")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ToolboxItem(false)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
[System.Web.Script.Services.ScriptService]
public class MyWebService : System.Web.Services.WebService
{
[WebMethod]
public List<string> GetSimilarMemberByName(string prefixText, int count)
{
List<string> result = new List<string>();
BLLUser bllUser = new BLLUser();
DataTable table = bllUser.GetSimilarMemberByName(prefixText,count);
foreach (DataRow item in table.Rows)
{
result.Add(item["name"].ToString());
}
return result;
}
}
不过由于AjaxControlToolkit控件库中的东西在界面每次回传的时候 都Dispose了
所以在使用处 需要每次回发都要订制一遍
使用处 封装好的用户控件的id就叫做Mytxt1
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//首次加载的时候 绑定的方法
}
Mytxt1.GetText += new WebMemberManage.WebUserControl.MyDel(Mytxt1_GetText);
}
void Mytxt1_GetText()
{
//具体的绑定方法
}