微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

类似百度搜索时的模糊查询

 

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" onclick="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()
        {
            //具体的绑定方法
        }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐