1

以下はすべて問題ないようです。クエリを実行すると、サービスが正常に機能する3つの部分を提供しました。

/// <summary>
/// Summary description for AutoCompleteService
/// </summary>
[WebService(Namespace = "http://schemas")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
[System.Web.Script.Services.ScriptService]
public class AutoCompleteService : BaseWebService
{
    /// <summary>
    /// Gets or sets the account finder service.
    /// </summary>
    public ICheckoutService CheckOutService { get; set; }

    /// <summary>
    /// Finds all addresses matching either the postcode or suburb given in the prefix text.
    /// </summary>
    /// <param name="prefixText">The prefix text.</param>
    /// <param name="count">The count.</param>
    /// <returns>Aray of address details</returns>
    [WebMethod]
    public string[] FindAddresses(string prefixText, int count)
    {
        //Check the parameters
        if (count == 0) count = 10;
        var suburbs = CheckOutService.FindMatchingForPartialAddress(prefixText);
        return suburbs.Take(count).ToArray();


    }
}

続いてジャバスクリプト

<script language="javascript">


$(function () {
    $("#postcode").autocomplete({
        source: "AutoCompleteService.asmx/FindAddresses",
        minLength: 1,
        select: function (event, ui) {
            $(this).val(ui.item.value);
        }
    });
});
</script>

続いてテキストボックス

     <asp:TextBox runat="server" name="postcode" id="postcode" ></asp:TextBox>

応答

 <ArrayOfStringxmlns: xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:    xsd="http://www.w3.org/2001/XMLSchema"xmlns="http://schemas.forcetechnology.com.au/2009/04/Fulfilment"><string>ABBARIVER,WA,6280</string><string>ABBEY,WA,6280</string><string>ACTONPARK,WA,6280</string>string>ADAMSVALE,WA,6375</string></ArrayOfString>

わかりました、次の変更を行いました。私を正しい方向に向けてくれたこと、また出発点を提供してくれたことに感謝します。また、これによりエラーメッセージが表示されるので、改訂版を以下に示します。

         [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public string[] FindAddresses(string prefixText)
    {
        //Check the parameters

        var suburbs = CheckOutService.FindMatchingForPartialAddress(prefixText);
        return suburbs.ToArray();


    }


     $(document).ready(function () {
    $('[ID$=postcode]').live('keyup.autocomplete', function () {

        $(this).autocomplete({
            source: function (request, response) {
                alert(request.term);
                $.ajax({
                    url: '<%=ResolveUrl("AutoCompleteService.asmx/FindAddresses") %>',
                    data: "{ prefixText:'" + request.term + "'}",
                    dataType: "json",
                    type: "POST",
                    contentType: "application/json; charset=utf-8",
                    success: function (data) {
                        response($.map(data.d, function (item) {
                            return {
                                label: item.split('-')[0],
                                val: item.split('-')[1]
                            }
                        }))
                    },
                    error: function (response) {
                        alert(response.responseText);
                    },
                    failure: function (response) {
                        alert(response.responseText);
                    }
                });
            },
            select: function (e, i) {
            },
            minLength: 1
        });
    });
});
4

2 に答える 2

2

オートコンプリートが JQueryUI で、オートコンプリートにいくつかのカスタム パラメーターを提供する場合は、ソースを設定する関数を提供する必要があります。ここを見てください 。これは、それを定義するのに役立ちます。

また、@ Shadow-Wizzardが言ったように、正しいIDを持っていることを確認したいかもしれません

于 2012-08-02T07:44:19.417 に答える
1

次のコードを試してください。それは私のために働いています..

  $(document).ready(function () {
        $('[ID$=txtLastname]').live('keyup.autocomplete', function () {

            $(this).autocomplete({
                source: function (request, response) {
                    $.ajax({
                        url: '<%=ResolveUrl("~/Resources/WebService.asmx/LastName") %>',
                        data: "{ 'prefix': '" + request.term + "'}",
                        dataType: "json",
                        type: "POST",
                        contentType: "application/json; charset=utf-8",
                        success: function (data) {
                            response($.map(data.d, function (item) {
                                return {
                                    label: item.split('-')[0],
                                    val: item.split('-')[1]
                                }
                            }))
                        },
                        error: function (response) {
                            alert(response.responseText);
                        },
                        failure: function (response) {
                            alert(response.responseText);
                        }
                    });
                },
                select: function (e, i) {
                },
                minLength: 1
            });
        });

ウェブ方式は

 [WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string[] LastName(string prefix)
{
    List<string> customers = new List<string>();
    using (SqlConnection conn = new SqlConnection())
    {
        string connectionstring = CCMMUtility.GetCacheForWholeApplication();
        conn.ConnectionString = connectionstring;
        using (SqlCommand cmd = new SqlCommand())
        {
            cmd.CommandText = "select distinct top(10) Lastname from tblusers where  " +
            "Lastname  like '%'+ @SearchText + '%' order by Lastname";
            cmd.Parameters.AddWithValue("@SearchText", prefix);
            cmd.Connection = conn;
            conn.Open();
            using (SqlDataReader sdr = cmd.ExecuteReader())
            {
                while (sdr.Read())
                {
                    customers.Add(string.Format("{0}", sdr["Lastname"]));
                }
            }
            conn.Close();
        }
        return customers.ToArray();
    }
}
于 2012-08-02T07:50:44.217 に答える