У меня была эта проблема, и независимо от того, как я украсил класс или метод в файле .asmx, я продолжал получать XML в качестве результата. Я наконец нашел ссылку, которая помогла мне создать просто стандартную страницу .aspx. Файл .aspx выглядит следующим образом:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ScheduledEvents.aspx.cs" Inherits="ScheduledEvents" %>
А мой файл .aspx.cs такой:
public partial class ScheduledEvents : System.Web.UI.Page
{
protected override void Render(HtmlTextWriter writer)
{
List<Event> itemList = new List<Event>();
for (int i = 0; i < 5; ++i)
{
Event newEvent = new Event();
newEvent.id = i;
newEvent.className = "";
newEvent.title = "Test";
newEvent.start = (((int)DateTime.Now.AddDays(i).ToUniversalTime().Subtract(Event.rootTime).TotalSeconds)).ToString();
newEvent.end = (((int)DateTime.Now.AddDays(i).AddMinutes(60).ToUniversalTime().Subtract(Event.rootTime).TotalSeconds)).ToString();
newEvent.url = "http://www.google.com";
newEvent.allDay = false;
itemList.Add(newEvent);
}
Response.Clear();
Response.ContentType = "application/json";
Response.Write(new JavaScriptSerializer().Serialize(itemList.ToArray()));
}
}
Вы можете угадать состав класса Event, но это выглядит так:
public class Event
{
public static readonly DateTime rootTime = DateTime.Parse("1970-01-01 00:00:00");
public int id = default(int);
public string className = string.Empty;
public string title = string.Empty;
public string start = string.Empty;
public string end = string.Empty;
public string url = string.Empty;
public bool allDay = false;
}
Полный календарь использует секунды с 01.01.1970, поэтому используется «rootTime». Кроме того, startDate & endDate приводятся как int для обрезки десятичных разрядов, что не нравится Full Calendar.