1

この Web API オートコンプリートを標準の mvc アプリに実装しようとしています。 http://techbrij.com/987/jquery-ui-autocomplete-asp-net-web-api

これは、Firebug http://sdrv.ms/N0WkHPからのスクリーン グラブです。
ここに画像の説明を入力

コントローラー メソッドを作成し、jquery スクリプトを追加しましたが、「JSON.parse: 予期しない文字」エラーが発生し続けます。データに異常な文字は見当たりません。

$(document).ready(function () {
$('#txtSearch3').autocomplete({
    source: function (request, response) {
        $.ajax({
            url: '/home/Get',
            type: 'GET',
            cache: false,
            data: request,
            dataType: 'json',
            success: function (json) {
                // call autocomplete callback method with results
                response($.map(json, function (name, val) {
                    return {
                        label: name,
                        value: val
                    }
                }));
            },
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                //alert('error - ' + textStatus);
                console.log('error', textStatus, errorThrown);
            }
        });
    },
    minLength: 2,
    select: function (event, ui) {
        alert('you have selected ' + ui.item.label + ' ID: ' + ui.item.value);
        $('#txtSearch3').val(ui.item.label);
        return false;
    }
})
});

// 私のコントローラーコード

 public IDictionary<int, string> Get(string term)
    {
        using (myEntities context = new myEntities())

        {
            return context.Categories1.Where(x => x.CategoryName.Contains(term)).ToDictionary(x => x.CategoryId, x => x.CategoryName);
        }

    }
4

2 に答える 2

0

コントローラがJSONを返すようにしてみてください。

public JsonResult Get(string term)
{
    using (myEntities context = new myEntities())
    {
        return Json(context.Categories1.Where(x => x.CategoryName.Contains(term)).ToDictionary(x => x.CategoryId, x => x.CategoryName));
    }

}
于 2012-07-01T22:44:47.723 に答える
0

OK、最終的にこれを理解しました。私の戻り値は有効なjsonである必要があり、ラベル/値は必要ありません。

役立つ返信をありがとう

$(document).ready(function () {
$('#txtSearch3').autocomplete({
    source: function (request, response) {
        $.ajax({
            url: '/home/Get',
            type: 'GET',
            cache: false,
            contentType: "application/json; charset=utf-8",
            data: request,
            dataType: 'json',
            success: function (json) {

                response($.map(json, function () {
                    return json;

                }));

            },
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                //alert('error - ' + textStatus);
                console.log('error', textStatus, errorThrown);
            }
        });
    },
    minLength: 2,
    select: function (event, ui) {
        alert('you have selected ' + ui.item.label + ' ID: ' + ui.item.value);
        $('#txtSearch3').val(ui.item.label);
        return false;
    }
})

});

于 2012-07-03T11:46:01.513 に答える