1

これには簡単な答えがあるように感じますが、JSONデータをJQueryUIオートコンプリート関数に返すときに問題が発生します。'label'フィールドと'value'フィールドを使用しているので、idフィールドを格納できます。問題は、JQuery関数に渡された後、オブジェクトの値を解析できないことです。

ASP.NET C#には、次のオブジェクトがあります。

public class AutoCompleteItem
{
    public string label { get; set; }
    public string value { get; set; }
}

それらをリストに設定し、JSONとしてフォーマットして、次を返します。

List<AutoCompleteItem> autoCompleteItems = new List<AutoCompleteItem>();
// Loop through data, add objects to list
var oSerializer = new JavaScriptSerializer();
string sJSON = oSerializer.Serialize(autoCompleteItems);
return sJSON;

JQueryに渡された後のJSONデータ:

"[{"label":"Steve","value":"ID4545"},{"label":"Joe","value":"ID1212"},{"label":"Rick","value":"ID6767"}]"

これは、JSONからデータを取得するために使用している関数です。

success: function (data) {
      response($.map(data.d, function (item) {
          return {
              label: item.label,
              value: item.value
          }
                                }));
},

'label'、'value'形式を使用する前に、IList文字列だけで機能することに気づきました。渡されたデータの外側には引用符がありませんでしたが、私の元の例には引用符があります

["Steve", "Joe", "Rick"]

これが問題に関係しているかどうかはわかりませんが、私は多くのことを試みましたが無駄になりました。どんな助けでも大歓迎です!

4

3 に答える 3

2

.d表示したJSONにはプロパティがありません。それで:

success: function (data) {
    response(
        $.map(data, function (item) {
            return {
                label: item.label,
                value: item.value
            };
        })
    );
},

ただし、ASP.NET Pageメソッドを使用する場合は、.dプロパティがあり、JSONを手動でシリアル化する必要はありません。たとえば、コードビハインドに次のPageMethodを含めることができます。

[WebMethod]
public static List<AutoCompleteItem> GetAutoCompleteValues(string term)
{
    // the term variable will contain what the user entered so far

    var autoCompleteItems = new List<AutoCompleteItem>();
    // Loop through data, add objects to list
    return autoCompleteItems;
}

その後:

source: function(request, response) {
    $.ajax({
        url: '/foo.aspx/GetAutoCompleteValues',
        type: 'POST',
        contentType: 'application/json',
        data: JSON.stringify({ term: request.term }),
        success: function(data) {
            response(
                $.map(data.d, function(item) {
                    return {
                        label: item.label,
                        value: item.value
                    };
                });
            );
        })
    });
});
于 2012-04-12T19:18:36.927 に答える
0

JSON応答を変換する必要はありません-jQueryUIはすでにそれらのトークンを期待しています。

jQuery UIドキュメントから:

$(function() {
        function log( message ) {
            $( "<div/>" ).text( message ).prependTo( "#log" );
            $( "#log" ).scrollTop( 0 );
        }

        $( "#birds" ).autocomplete({
            source: "search.php",
            minLength: 2,
            select: function( event, ui ) {
                log( ui.item ?
                    "Selected: " + ui.item.value + " aka " + ui.item.id :
                    "Nothing selected, input was " + this.value );
            }
        });
    });

value2番目のパラメーターjQueryがこれらのイベントハンドラーに渡すときに、アイテムのプロパティに直接アクセスできidます(ドキュメントの例select:)。変換は必要ありません。

于 2012-04-12T19:19:27.107 に答える
0

JavaScriptSerializer()そもそもなぜ使うのか?必要なのは

 public ActionResult GetUserAutoComplete(string term)
 {  
      var users = _userRepository.GetUsersByTerm(term);
      var autoCompleteData = users.Select(x => new { label = x.Name + " " + x.Surname, value = x.Name + " " + x.Surname, id = x.UserId, }).ToArray();
      return Json(data, JsonRequestBehavior.AllowGet);
}
于 2012-04-12T19:26:22.047 に答える