1

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

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

文件:

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

自动完成.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;
    } 
}
4

2 回答 2

1

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

  • 正在为 Web 服务命中服务器代码?
  • 您的查询正在执行并返回结果?
  • 您的 items 数组是否已正确填充?

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

于 2009-04-08T17:55:19.637 回答
1

Try fiddling with the CompletionInterval property. I have used this control in the past and wasn't seeing the behavior I expected until I set the CompletionInterval to a much lower value. It defaults to 1000 (ms), I would give it a shot with a value of 1, just to see if everything is working as it should (and womp's steps should help to narrow down where the communication issues are happening) and if it does work, keep increasing the value until you hit a value that makes sense (1 ms sends a lot of requests to the server). Report back on what works and what doesn't.

于 2009-04-08T18:48:49.010 回答