2

コードの間違いを探すために手紙を出そうとしましたが、オートコンプリート エクステンダーを動作させることができません。従業員求む。

ここに私のコードがあります:(私のaspxページからの抜粋)

  <asp:TextBox ID="TextBox1" Width="120px" runat="server"></asp:TextBox>
    <cc1:AutoCompleteExtender ID="AutoCompleteExtender1" runat="server" TargetControlID="TextBox1" ServiceMethod="GetCompletionList" ServicePath="SearchAutoComplete.asmx" MinimumPrefixLength="1">
    </cc1:AutoCompleteExtender> 

私のWebサービスコード:

 [WebMethod]
    public static string[] GetCompletionList(string prefixText, int count)
    {
        List<string> returnData = new List<string>();
        MySqlConnection con = new MySqlConnection(Connection.ConnectionString());
        string sql = "select title from blog where title like '%" + prefixText + "%'";
        MySqlCommand cmd = new MySqlCommand(sql, con);
        con.Open();
        MySqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
        while (reader.Read())
        {
            returnData.Add(reader["title"].ToString());
        }
        return returnData.ToArray();
    }
4

6 に答える 6

2

これをトラブルシューティングする方法:

SQL コードをコメントアウトします。テストデータを含む配列を返すだけです。それは動作しますか?あなた見えますか?そうでない場合は、Web サービス コードが呼び出されていません。それが機能する場合、問題はデータベース コードにあります.. Web サービス コードは呼び出しページにありますか?

于 2008-11-23T16:55:03.407 に答える
2

GetCompletionListメソッドが として誤って宣言されているだけでなく、static2 つの属性が必要です。[System.Web.Services.WebMethod][System.Web.Script.Services.ScriptMethod]

したがって、宣言は次のようになります。

[System.Web.Services.WebMethod]
[System.Web.Script.Services.ScriptMethod]
public string[] GetCompletionList(string prefixText, int count) { ...

また、サービス クラスには次の属性が必要です。

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
[System.Web.Script.Services.ScriptService]

GetCompletionListメソッドが例外をスローすると、オートコンプリート エクステンダーも壊れているように見えます。これを防ぐにはtry..catch、関数のコードの周りにブロックを追加する必要があります

[System.Web.Services.WebMethod]
[System.Web.Script.Services.ScriptMethod]
public string[] GetCompletionList(string prefixText, int count)
{
    List<string> returnData = new List<string>();

    try
    {
        // database access code that sets returnData
    }
    catch (Exception ex)
    {
        // log the exception
    }

    return returnData.ToArray();
}
于 2008-11-24T13:16:31.100 に答える
1

あなたの問題は、GetCompletionListメソッドが宣言されていることだと思いますstatic

デバッガー セッションで .asmx コードだけを実行すると (または、コードを Web サーバーにデプロイした場合は .asmx ファイルを参照すると)、Web サービスで使用可能な操作のリストが表示されます。Ajax コントロール ツールキットの例のコードを変更して、このメソッドを static として宣言すると、操作がリストに表示されなくなり、オートコンプリート エクステンダーも動作しなくなります。

メソッドの署名を次のように変更します。

public string[] GetCompletionList(string prefixText, int count) 
于 2008-11-23T20:45:28.340 に答える
1

このように ScriptManager で Web サービスへの参照を追加します

<asp:ScriptManager ID="ScriptManager1" runat="server">
<Services>
 <asp:ServiceReference Path="AutoComplete.asmx" />
 </Services>
 </asp:ScriptManager>

詳細については、以下のリンクを参照してください

グリッドビューのAjaxオートコンプリートテキストボックス

于 2009-07-01T06:00:21.667 に答える
1

まず、Web メソッド宣言から「静的」を削除します。2 つ目は、EnableCaching="true" CompletionSetCount="20" を

      <cc1:AutoCompleteExtender  

      </cc1:AutoCompleteExtender> 

コードブロック。これで問題が解決することを願っています。

于 2012-01-13T10:55:51.030 に答える