0

Autocomplete検索オプション用のフィールドを作成したいと考えています。次のコードで試しました。

ただし、関数の実行時にWeb メソッドは起動しません。Autocompleteその理由は何でしょう?

jQuery関数は次のとおりです。

<script type="text/javascript">
    $(function () { $("#<%=tags.ClientID %>").autocomplete({
         source:function (request, response) {
         $.ajax ({
             type: "POST",
            contentType: "application/json; charset=utf-8",
            url: "~/Services/AutoComplete.asmx/GetFarmersByName",
            data: "{ 'name' : '" + $("#<%=tags.ClientID %>").val() + "'}",
            dataType: "json",
            async: true,
            dataFilter: function (data) { return data; },
            success: function (data) {
                      response($(data.d, function (item) {
                                return            {
                                    value: item.AdrNm
                                }
                       }));
                     },
           error: function (XMLHttpRequest, textStatus, errorThrown) {
                            alert(textStatus);
                        }
                    });
                }

            });
        });
 </script>

ウェブメソッドはこちら

    [WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public List<FMISPersonalDataViewByName_Result> GetFarmersByName(string name)
    {
        this._personalData = new personalData();
        int cky = 45;
        CdMa cdMas = new CdMa();
        cdMas = this._personalData.getcdMasByConcdCd2(cky, "AdrPreFix", true);
        int prefixKy = cdMas.CdKy;

        List<FMISPersonalDataViewByName_Result> list = new List<FMISPersonalDataViewByName_Result>();

        list = this._personalData.GetPersonalDataByName(prefixKy, cky, name);
        return list;
    }
4

6 に答える 6

3

サービス関数にブレークポイントを設定して、Web サービス関数にヒットしていることを確認してください。スクリプトを次のように変更してください。

<script type="text/javascript">
    $(function () {
        $("#<%=tags.ClientID %>").autocomplete
        ({

            source:
            function (request, response) {
                $.ajax
                ({
                    url: " <%=ResolveUrl("~/Services/AutoComplete.asmx/GetFarmersByName") %>",

                    data: "{ 'name' : '" + $("#<%=tags.ClientID %>").val() + "'}",

                    dataType: "json",

                    type: "POST",

                    contentType: "application/json; charset=utf-8",                   

                    async: true,

                    dataFilter: function (data) { return data; },

                    success: function (data) 
                    {
                        response($(data.d, function (item) 
                        {
                            return
                            {
                                value: item.AdrNm
                            }
                        }));
                    },
                    error: function (XMLHttpRequest, textStatus, errorThrown) {
                        alert(textStatus);
                    }
                });
            }

        });
    });
</script>
于 2013-07-04T06:37:36.303 に答える
1

テキストボックスと仮定tagsして、データを次のように設定します{ 'name': '" + request.term + "'}

$("#<%=tags.ClientID %>").autocomplete({
     source: function (request, response) {
         $.ajax({
             url: "Services/AutoComplete.asmx/GetFarmersByName",
             data: "{ 'name': '" + 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);
             },
         });
     },
     minLength: 0,
     focus: function () {
         // prevent value inserted on focus
         return false;
     },
 });

メソッド GetFarmersByName のデバッグ、

注:[System.Web.Script.Services.ScriptService] .asmx ページでコメントを外したことを確認してください。

于 2013-07-04T07:27:50.090 に答える
1

このメソッドを呼び出している分離コード ファイル内にこのメソッドを貼り付けます。url を url: "Test.aspx/GetFarmersByName" に変更してテストします。Web サービスよりもはるかにクリーンなコードです。

using System.Web.Script.Services;
[WebMethod]
[ScriptMethod(UseHttpGet = false, ResponseFormat = ResponseFormat.Json)]
public List<string> GetFarmersByName(string aaa)
{
    List<string> list = new List<string>();
    list.Add(aaa);
    return list;
}
于 2014-05-13T07:56:23.373 に答える
1

再投稿!!!

テスト.aspx:

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script src="jquery-1.9.0.min.js"></script>
    <script type="text/javascript">
        $(function(){
            $("#Button1").bind("click",function(){
                $.ajax({
                    type: "POST",
                    url: "Test.asmx/GetFarmersByName",
                    data:"{'aaa':'zhangsan'}",
                    contentType: "application/json;charset=utf-8",
                    dataType: "json",
                    async: false,
                    success: function (json) {

                    },
                    failure: function () {
                        alert("Sorry,there is a error!");
                    }
                });
            })
        })

    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <input id="Button1" type="button" value="button" />
    </div>
    </form>
</body>
</html>

テスト.asmx:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Script.Services;
using System.Web.Services;

namespace TestWebForm
{
    /// <summary>
    /// Summary description for Test
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
    [System.Web.Script.Services.ScriptService]
    public class Test : System.Web.Services.WebService
    {

        [WebMethod]
        [ScriptMethod(UseHttpGet = false, ResponseFormat = ResponseFormat.Json)]
        public List<string> GetFarmersByName(string aaa)
        {
            List<string> list = new List<string>();
            list.Add(aaa);
            return list;
        }
    }
}
于 2013-07-04T08:36:44.993 に答える