代码之家  ›  专栏  ›  技术社区  ›  somacore

Ajax AutoCompleteExtender不工作。Web服务工作

  •  1
  • somacore  · 技术社区  · 16 年前

    这是C.NET 2.0。我正在使用母版页。

    • WebService本身运行良好。
    • 我完全被难住了。当我输入文本框时,什么都不会发生。

    文件夹:

    编辑软件 自动完成.asmx 应用程序代码/自动完成.cs

    编辑票据.aspx:

            <%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc2" %>
    
    
            <asp:ScriptManager id="ScriptManager1" runat="server" EnablepageMethods="true">
            <Services>
                <asp:ServiceReference Path="AutoComplete.asmx" />
            </Services>
            </asp:ScriptManager>
    
        <cc2:AutoCompleteExtender
             runat="server" 
             ID="AutoCompleteExtender1" 
             ServicePath="AutoComplete.asmx" 
             ServiceMethod="AutoComplete2" 
             MinimumPrefixLength="1" 
             CompletionSetCount="12" 
             TargetControlID="TextBox3" 
             EnableCaching="True" >
         </cc2:AutoCompleteExtender>
    
    <asp:TextBox ID="TextBox3" runat="server"></asp:TextBox>
    

    自动完成.asmx:

    <%@ WebService Language="C#" CodeBehind="~/App_Code/AutoComplete.cs" Class="AutoComplete" %>
    

    自动完成.cs:

    using System;
    using System.Web;
    using System.Collections;
    using System.Web.Services;
    using System.Web.Script.Services;
    using System.Web.Services.Protocols;
    using System.Collections.Generic;
    using System.Data.SqlClient;
    using System.Configuration;
    using System.Data;
    
    
    /// <summary>
    /// Summary description for AutoComplete
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [ScriptService]
    public class AutoComplete : System.Web.Services.WebService {
    
        public AutoComplete () {
    
            //Uncomment the following line if using designed components 
            //InitializeComponent(); 
        }
    
        [WebMethod]
        [ScriptMethod]
        public string[] AutoComplete2(string prefixText,int count)
        {
            string conString = ConfigurationManager.ConnectionStrings["DB"].ConnectionString;
            SqlConnection connection = new SqlConnection(conString);
            connection.Open();
            SqlParameter prm;
            string sql = "Select program_name FROM CM_Programs WHERE program_name LIKE @prefixText";
            SqlDataAdapter cmd = new SqlDataAdapter(sql, connection);
            prm = new SqlParameter("@prefixText", SqlDbType.VarChar, 50);
            prm.Value = prefixText+ "%";
            cmd.SelectCommand.Parameters.Add(prm);
            DataTable dt = new DataTable();
            cmd.Fill(dt);
            string[] items = new string[dt.Rows.Count];
            int i = 0;
            foreach (DataRow dr in dt.Rows)
            {
                items.SetValue(dr["program_name"].ToString(),i);
                i++;
            }
            connection.Close();
            return items;
        } 
    }
    
    2 回复  |  直到 13 年前
        1
  •  1
  •   womp    16 年前

    “什么都没发生”不是一个简单的描述。当你说什么都没发生时,你检查过了吗?

    • 正在点击服务器代码 Web服务?
    • 正在执行您的查询,并且 返回结果?
    • 正在填充项数组 正确地?

    如果“Nothing”没有发生上述任何情况,我将开始检查页面上是否没有javascript错误,以及您的自动完成扩展程序是否正确呈现(检查跟踪中的页面控件)。

        2
  •  1
  •   AdamB    16 年前

    尝试修改CompletionInterval属性。我以前使用过这个控件,直到我将completionInterval设置为一个更低的值,我才看到我期望的行为。它默认为1000(ms),我会给它一个值为1的快照,看看是否一切正常(Womp的步骤有助于缩小通信问题发生的范围),如果一切正常,继续增加值,直到达到一个合理的值(1 ms向服务器发送大量请求)。报告哪些有效,哪些无效。