首页 > 解决方案 > 如何在 asp.net mvc 中更改 json 格式?

问题描述

我正在尝试使用此链接制作自动完成文本框

https://github.com/devbridge/jQuery-自动完成

但我收到了这个错误 Uncaught TypeError: Cannot read property 'length' of undefined

这是我的行动方法

public JsonResult GetNews(string prefix)
{
  var newsList = NewsDataRoot.AutoCompleteTitle(prefix).Select(n => new
  {
    value = n.Title,
    data = n.Id
  }).ToList();
  var myjson = Json(newsList, JsonRequestBehavior.AllowGet);
  return myjson;
}

当我在浏览器中测试它时它会返回这个结果

[{"value":"this is a test","data":2006}]

我发现格式必须是

{
    suggestions: [{
        "value": "United Arab Emirates",
        "data": "AE"
    }, {
        "value": "United Kingdom",
        "data": "UK"
    }, {
        "value": "United States",
        "data": "US"
    }, {
        "value": "United Funes",
        "data": "DAN"
    }]
}

怎么能做到这一点?多谢!

也如您所见,我尝试了 transformResult 但它没有用

<script>

    $('#autocomplete').autocomplete({
        serviceUrl: '/TestAutoComplete/GetNews',
        paramName: 'prefix',
        transformResult: function(response) {
            return {
                suggestions: $.map(response.myData, function(dataItem) {
                    return { value: dataItem.valueField, data: dataItem.dataField };
                })
            };
        },
        onSelect: function (suggestion) {
            alert('You selected: ' + suggestion.value + ', ' + suggestion.data);
        }
    });

</script>

标签: jsonasp.net-mvcjquery-ui-autocomplete

解决方案


试试这个,创建一个只有suggestions属性的匿名对象

var newsList = NewsDataRoot.AutoCompleteTitle(prefix)
       .Select(n => new {
             value = n.Title,
             data = n.Id
       }).ToList();

var myjson = Json(new { suggestions = newsList }, JsonRequestBehavior.AllowGet);

推荐阅读