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] 举报,一经查实,本站将立刻删除。