【问题标题】:AJAX AutocompleteExtender isn't working. Web Service worksAJAX AutocompleteExtender 不工作。网络服务工作
【发布时间】:2010-10-18 08:56:27
【问题描述】:

这是 c# .net 2.0。我正在使用母版页。

  • WebService 可以自行正常工作。
  • 我完全被难住了。当我在 TextBox 中输入时,什么也没有发生。

文件:

EditTicket.aspx 自动完成.asmx App_Code/AutoComplete.cs

EditTicket.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" %>

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;
    } 
}

【问题讨论】:

    标签: web-services asp.net-ajax ajaxcontroltoolkit autocompleteextender


    【解决方案1】:

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

    • 服务器代码正在被命中 网络服务?
    • 您的查询正在执行并且 返回结果?
    • 正在填充您的 items 数组 正确吗?

    如果“什么都没有”是指以上都没有发生,我将开始检查页面上没有 javascript 错误以及您的 AutoComplete 扩展程序是否正确呈现(检查跟踪中的页面控件)。

    【讨论】:

    • 我能够自己运行 web 服务,并像我预期的那样在数组中获得自动完成的结果。那部分工作得很好。最终结果是我的网站一开始就不是 AJAX 网站,所以我不得不复制 AJAX 网站的 web.config 并与我的 web.config 合并。
    • 您能否明确发布您在 web.config 中所做的更改,因为我遇到了同样的问题?
    • 好的,它现在对我有用。我的解决方案只是没有忽略 Web 服务中的这个短语 // 要允许从脚本调用此 Web 服务,使用 //ASP.NET AJAX,取消注释以下行。 [System.Web.Script.Services.ScriptService()]
    【解决方案2】:

    尝试摆弄 CompletionInterval 属性。我过去曾使用过此控件,但在将 CompletionInterval 设置为低得多的值之前,我没有看到预期的行为。它默认为 1000(毫秒),我会给它一个值为 1 的镜头,只是为了看看一切是否正常工作(并且 womp 的步骤应该有助于缩小发生通信问题的范围)以及是否确实如此工作,继续增加值,直到你达到一个有意义的值(1 ms 向服务器发送大量请求)。报告哪些有效,哪些无效。

    【讨论】:

    • 感谢您的帮助。我弄明白了(见上面的评论),但完成间隔肯定需要从默认值降低,这样用户就不必坐下来等待结果出现。谢谢!
    猜你喜欢
    • 2013-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-12
    • 1970-01-01
    • 2018-05-22
    • 2016-06-08
    • 1970-01-01
    相关资源
    最近更新 更多