Для тех, кто сталкивается с этой проблемой, вот еще один потенциальный интерес. В моем контроллере у меня было следующее:
var events = (from e in db.EventMsts
where e.Eventid.Equals(eventID)
orderby e.EventNm
select new { e.Eventid, e.EventNm, e.EventDescription, e.URLEventSite, e.URLTicketSales,e.EventDates })
.Take(1)
.ToArray();
return Json(events);
Который не выдавал никаких исключений, и тогда браузер получал бы HTTP 500.
e.EventDates - это коллекция объектов, в то время как остальные были строками / целыми числами. Простое удаление e.eventDates из контроллера (и запроса ajax) позволило добиться успеха (за исключением пропуска данных, которые я хочу).
Согласно ответу Крэйга, существуют ограничения безопасности, которые не позволяют передавать подобные аргументы (Крейг, я просто доверяю вам в этом, поскольку на самом деле я не видел документа по этому поводу). Решение состояло в том, чтобы развернуть мой объект EventDates до одной строки с разделителями, чтобы я мог проанализировать его в jQuery. Вот то, что мой код стал и теперь работает для меня - обратите внимание, что у события есть Даты события, а у даты события есть время события.
var dateTimeList = new StringBuilder();
var times = (from t in db.EventTimes
where t.EventDate.Eventid.Equals(eventID)
orderby t.EventStartTm
select
new {
t.EventDate.EventDt,
t.EventStartTm,
t.EventEndTm}).ToArray();
foreach (var time in times)
{
if (dateTimeList.Length > 0)
{
dateTimeList.Append("|" + time.EventDt + " from " + time.EventStartTm + " to " + time.EventEndTm ?? "whenever");
}
else
{
dateTimeList.Append(time.EventDt + " from " + time.EventStartTm + " to " + time.EventEndTm ?? "whenever");
}
}
var dateTimeString = dateTimeList.ToString();
var evnt = (from e in db.EventMsts
where e.Eventid.Equals(eventID)
orderby e.EventNm
select new { e.Eventid, e.EventNm, e.EventDescription, e.URLEventSite, e.URLTicketSales, dateTimeString })
.FirstOrDefault();
return Json(evnt);