Я вызываю следующее действие из JQuery. Когда я смотрю на значения «данные», он отображает ожидаемую информацию, включая сбор адресов. Но когда я передаю это как JSon в свой JQuery, коллекция адресов пуста. Можно ли передавать коллекцию в данные My JSon?Передача коллекции через JSON
[AcceptVerbs("get")]
public ActionResult GetInstitutions(string term)
{
var data = (from i in db.Institutions
.Where(a => a.Name.Contains(term))
let pa = i.Addresses.Take(5)
select new {
i.ID,
value = i.Name,
i.Website
,Addresses = pa
})
.Take(10).ToArray();
JsonSerializerSettings jsSettings = new JsonSerializerSettings();
jsSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
return Content(JsonConvert.SerializeObject(data, Formatting.None, jsSettings));
}
Из этого JQuery:
$(".autocompleteInst").autocomplete({
source: "@Url.Action("GetInstitutions", "Institution")",
minLength: 3,
delay: 100,
select: function (event, ui) {
alert(ui.item.Addresses[0].Street1);
}
});
** Обновление ** Я добавил код конфигурации JSon в моем примере, что я оставил из первоначально. Я уверен, что настройки ReferenceLoopHandling вызывают проблему. Любые идеи о том, как установить сериализатор только на один уровень на петлях?
Вы можете изменить ActionResult на JsonResult и вернуть новый JsonResult {data = data}; вместо этого? – DarthCoder
Re. вышесказанное; 'JsonResult' наследуется от' ActionResult', поэтому вам не нужно менять тип возврата. Это также должно быть 'return Json (data, JsonRequestBehavior.AllowGet);' –
Вы просматривали запросы в Fiddler, чтобы видеть (1), если запросы вообще выполняются к вашей службе, и (2) какие данные возвращаются ? – JLRishe