1

これはc#.net 2.0です。私はマスターページを使用しています。AJAX AutocompleteExtenderが機能していません。 Webサービスは動作します

  • 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> 

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

答えて

1

"何も起こりません"というのは簡単な説明ではありません。何も起こらないと、あなたはそれをチェックしたのですか?

  • ウェブサービスでサーバーコードがヒットしていますか?
  • クエリが実行されており、 が結果を返しますか?
  • アイテムの配列には が正しく入力されていますか?

上記のいずれも起こっていない場合は、ページにjavascriptエラーがなく、オートコンプリートエクステンダが正しくレンダリングされていることを確認します(トレースのページコントロールを調べてください)。

+1

私はwebserviceを単独で実行して、私の期待どおりの配列で私のオートコンプリートの結果を得ることができました。その部分は正常に動作しました。最終的に私のウェブサイトはAJAXのウェブサイトではなかったので、AJAXサイトのweb.configをコピーしてweb.configとマージする必要がありました。 – somacore

+0

私は同じ種類の問題を抱えているため、web.configで変更した内容を明示的に投稿できますか? – Blerta

+0

これは私のために今働きます。私の解決策は、Webサービスでこのフレーズを無視していないだけでした。 //このWebサービスを//ASP.NET AJAXを使用してスクリプトから呼び出すには、次の行のコメントを外します。 [System.Web.Script.Services.ScriptService()] – Blerta

1

CompletionIntervalプロパティを使用して試してみてください。私は過去にこのコントロールを使用していましたが、CompletionIntervalをはるかに低い値に設定するまで、期待した動作を見ていませんでした。デフォルトでは1000(ms)に設定されていますが、値が1のショットを作成して、すべてが正常に動作しているかどうかを確認します(通信の問題が発生している場所を絞り込む必要があります) (1ミリ秒で多くの要求がサーバーに送信されます)、ヒットするまで値を増やしてください。何が効いているのか、何がないのかを報告してください。

+0

助けてくれてありがとう。私はそれを把握しました(上記のコメントを参照してください)が、ユーザーが座って結果が表示されるのを待つ必要がないように、完了間隔を間違いなくデフォルトから引き下げる必要があります。ありがとう! – somacore

関連する問題