Для всех, кто сталкивается с теми же проблемами, что и я, у меня есть несколько указателей, которые могут вам помочь. Это только то, что я нашел, помогло мне, и это просто руководство для всех, кто потратил недели драгоценного времени, задаваясь вопросом, почему на первый взгляд хороший код не работает. Я хорошо знаю, что мои навыки слабы (старик), но если это поможет спасти хотя бы одного человека, мое время не будет потрачено впустую.
Это для веб-форм C # .NET 3.5, а не MVC.
Во-первых, убедитесь, что свойства ContentType и ContentEncoding объекта Response установлены в JSON. В прошлом я использовал «text / plain», но мне кажется, что в этом случае это не работает:
context.Response.ContentType = "application/json";
context.Response.ContentEncoding = Encoding.UTF8;
При использовании LINQ создание нового объекта в том порядке и формате, которые ожидает календарь, поможет свести к минимуму проблемы с неточностями в данных. Если вам требуются встречи только для чтения, вы можете просто добавить эту опцию в список. Элемент «title» ниже работает как ISNULL или COALESCE в SQL, чтобы предотвратить возвращение нулей:
var apps = (
from a in db.Appointments
select new {
id = a.id,
start = a.startTime.Value,
end = a.endTime.Value,
title = a.subjectLine == null ? "" : a.subjectLine
}).ToList();
Несмотря на то, что существует множество способов сериализации набора данных в JSON, я обнаружил, что самый простой способ - использовать библиотеку NewtonSoft Json.NET . Это так же просто, как добавление одной строки для создания объекта JSON с необходимым форматированием даты ISO8601:
return JsonConvert.SerializeObject(apps, new IsoDateTimeConverter());
Что касается стороны jQuery, я покажу только функцию "data:", так как это та часть, которая заставила меня потерпеть неудачу дольше всего:
data: function(start, end, callback) {
$.ajax({
url: "/content/handlers/GetScheduledAppointments.ashx",
type: "GET",
success: function(json) {
callback(json);
},
async: false
});
}
Удобный совет, касающийся дат, к которому я пришел, прежде чем начал использовать библиотеку Json.NET - если вы просто не можете заставить .NET возвращать даты в формате, который нравится jWC, то используйте библиотеку [Date.js для выполнения дополнительное форматирование в самом jQuery. В течение нескольких дней я не мог заставить свой сервер выводить время начала и окончания в формате, который будет отображаться в календаре, независимо от того, что я пробовал. Во всех действующих примерах (с локальными данными, генерируемыми в jQuery) даты создавались в следующем формате:
new Date(year, month, day, hour, minute)
Таким образом, используя эту основу, также можно явным образом приводить даты, возвращаемые из серверной части, так как библиотека Date.js будет принимать почти все, что приближается к дате, и использует свое волшебство:
data: function(start, end, callback) {
$.ajax({
url: "/content/handlers/GetScheduledAppointments.ashx",
type: "GET",
success: function(json) {
if ($.isArray(json)) {
$.each(json, function(key, value) {
value.start = new Date(value.start);
value.end = new Date(value.end);
});
}
callback(json);
},
async: false
});
}
Я знаю, что ничего из этого не очень легкомысленно (или даже оптимизировано), но, надеюсь, это может быть полезно некоторым людям, которые испытывают реальные трудности с jWC и .NET.