【问题标题】:Asp.net using AutoCompleteExtenderAsp.net 使用 AutoCompleteExtender
【发布时间】:2010-02-15 21:29:48
【问题描述】:

我想使用带有文本框的 AutoCompleteExtender 来自动完成来自 mysql 数据库的用户输入。

但是当我运行代码并输入垃圾时的问题应该调用webservice方法但是服务方法在这里什么都不返回的问题是我的代码所以请给我建议。

<body>
    <form id="form1" runat="server">
    <div>
        <asp:ScriptManager ID="ScriptManager1" runat="server" />

    </div>
    <div>
        <asp:UpdatePanel id="UPSearch" runat="server">
            <ContentTemplate>
                <asp:Panel runat="server" style="position:absolute; top: 48px; left: 10px;">
                    <asp:TextBox ID="txtSearch" runat="server" 
                        style="position:absolute; top: 17px; left: 235px;"></asp:TextBox>
                    <cc1:AutoCompleteExtender ID="ACE_txtSearch" runat="server" TargetControlID="txtSearch" ServiceMethod= "GetByLastName" ServicePath="SearchService.asmx" MinimumPrefixLength="1" >
                    </cc1:AutoCompleteExtender>
                     <asp:RadioButton ID="rdoLastName" runat="server" 
                        style="position:absolute; top: 96px; left: 224px; width: 186px;" 
                        Text="Search By Last Name"/>

                </asp:Panel>
            </ContentTemplate>
        </asp:UpdatePanel>
    </div>
    </form>
</body>

网络服务

namespace Imam_Contacts
{

    [WebService(Namespace = "http://tempuri.org/")]
    [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 SearchService : System.Web.Services.WebService
    {


        [WebMethod]
        public string[] GetByLastName(string prefixText)
        {
         int count = 10;
         string sql = "Select * from contact_info Where Last_Name like @prefixText";
         SqlDataAdapter da = new SqlDataAdapter(sql,"server=localhost;User Id=root;database=contacts;Persist Security Info=True");
         da.SelectCommand.Parameters.Add("@prefixText", SqlDbType.VarChar, 50).Value = prefixText+ "%"; 
         DataTable dt = new DataTable(); 
         da.Fill(dt); 

         string[] items = new string[dt.Rows.Count];
         int i = 0; 
         foreach (DataRow dr in dt.Rows) 
         {
             items.SetValue(dr["Last_Name"].ToString(), i); 
             i++; 
         } 
         return items; 
        }
    }
}

【问题讨论】:

    标签: asp.net-ajax asp.net-3.5 autocompleteextender


    【解决方案1】:

    仅当您找不到更好的解决方案时,此答案才有意义,但我强烈建议您使用 jQuery 和它提供的众多自动完成插件之一。它更可靠,更可定制。

    【讨论】:

    • 我需要使用 Ajax。谢谢,
    • 所有 html 操纵的自动完成字段都将是 AJAX。
    • 我同意,如果您不完全局限于 ASP.NET AJAX,那么 jQuery 将是一个不错的选择。除了自动完成问题,如果可以的话,我仍然建议使用 jQuery。这两个框架可以(大部分)共存而没有问题。
    【解决方案2】:

    尝试将“ScriptMethod”属性添加到您的“GetByLastName”方法中。另外,我认为自动完成功能期望服务方法有第二个参数或 int 类型,我认为它代表该方法应返回的最大结果数。

    更新后的代码如下所示:

    namespace Imam_Contacts
    {
    
        [WebService(Namespace = "http://tempuri.org/")]
        [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 SearchService : System.Web.Services.WebService
        {
            [System.Web.Script.Services.ScriptMethod]
            [WebMethod]
            public string[] GetByLastName(string prefixText, int count)
            {
             int count = 10;
             string sql = "Select * from contact_info Where Last_Name like @prefixText";
             SqlDataAdapter da = new SqlDataAdapter(sql,"server=localhost;User Id=root;database=contacts;Persist Security Info=True");
             da.SelectCommand.Parameters.Add("@prefixText", SqlDbType.VarChar, 50).Value = prefixText+ "%"; 
             DataTable dt = new DataTable(); 
             da.Fill(dt); 
    
             string[] items = new string[dt.Rows.Count];
             int i = 0; 
             foreach (DataRow dr in dt.Rows) 
             {
                 items.SetValue(dr["Last_Name"].ToString(), i); 
                 i++; 
             } 
             return items; 
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2013-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-16
      • 2017-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多