我一直在尝试使用以下代码调用ASHX页面向fullCalendar添加一些事件。
页面脚本:
<script type="text/javascript">
$(document).ready(function() {
$('#calendar').fullCalendar({
header: {
left: 'prev,next today', center: 'title', right: 'month, agendaWeek,agendaDay'
},
events: 'FullCalendarEvents.ashx'
})
});
</script>
c#code:
public class EventsData
{
public int id { get; set; }
public string title { get; set; }
public string start { get; set; }
public string end { get; set; }
public string url { get; set; }
public int accountId { get; set; }
}
public class FullCalendarEvents : IHttpHandler
{
private static List<EventsData> testEventsData = new List<EventsData>
{
new EventsData {accountId = 0, title = "test 1", start = DateTime.Now.ToString("yyyy-MM-dd"), id=0},
new EventsData{ accountId = 1, title="test 2", start = DateTime.Now.AddHours(2).ToString("yyyy-MM-dd"), id=2}
};
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "application/json.";
context.Response.Write(GetEventData());
}
private string GetEventData()
{
List<EventsData> ed = testEventsData;
StringBuilder sb = new StringBuilder();
sb.Append("[");
foreach (var data in ed)
{
sb.Append("{");
sb.Append(string.Format("id: {0},", data.id));
sb.Append(string.Format("title:'{0}',", data.title));
sb.Append(string.Format("start: '{0}',", data.start));
sb.Append("allDay: false");
sb.Append("},");
}
sb.Remove(sb.Length - 1, 1);
sb.Append("]");
return sb.ToString();
}
}
调用ASHX页面并返回以下数据:
[{id:0,title:'test 1',start:'2010-06-07',allDay:false},{id:2,title:'test 2',start:'2010-06- 07',allDay:false}]
对ASHX页面的调用不会显示任何结果,但如果我将直接返回的值粘贴到它正确显示的事件中。我一直在尝试让这段代码工作一天,我不明白为什么事件没有设置。
任何有关如何使其发挥作用的帮助或建议将不胜感激。
史蒂夫
答案 0 :(得分:3)
如果有人遇到这个问题。我尝试了所有上述解决方案,但都没有奏效。 对我来说,问题是通过使用旧版本的jquery来解决的。我从fullcalendar包中包含的1.5.2版本切换到版本1.3.2
答案 1 :(得分:1)
史蒂夫, 我碰到了类似的东西 - 如果JSON直接在fullCalendar调用中,它将呈现事件,但它不会呈现来自外部URL的identicla JSON。我终于通过修改JSON来使它工作,因此“id”,“title”,“start”,“end”和“allDay”都有引号。
所以不要这样(使用你的样本JSON): [{id:0,title:'test 1',start:'2010-06-07',allDay:false},{id:2,title:'test 2',start:'2010-06-07', allDay:false}]
......我有这个: [{“id”:0,“title”:“test 1”,“start”:“2010-06-07”,“allDay”:false},{“id”:2,“title”:“test 2 “,”start“:”2010-06-07“,”allDay“:false}]
现在,为什么它在本地工作但不能远程工作,我不能说。
答案 2 :(得分:1)
您的JSON数据丢失了end
项目:
{id: 0,title:'test 1',start: '2010-06-07',end: '2010-06-07',allDay: false}
答案 3 :(得分:0)
让我们看看我们所知道的并消除可能性:
The ASHX page gets called and returnd the ... data:
所以服务器端部分正常工作,调用服务器端的代码正常工作。
I paste the values returned directly into the events it displays correctly.
因此处理响应的代码可以正常工作。
从逻辑上讲,我们在此处看到将服务器响应与日历输入相关联的代码无效。不幸的是,我没有使用jQuery fullCalendar方法,但也许你错过了一个回调声明?
答案 4 :(得分:0)
我认为这可能与您的日期值有关。
答案 5 :(得分:0)
FullCalendar events from asp.net ASHX page not displaying是解决问题的正确方法。
我使用长格式的日期。
而@Steve而不是StringAppending我们可以使用: -
System.Web.Script.Serialization.JavaScriptSerializer oSerializer =
new System.Web.Script.Serialization.JavaScriptSerializer();
String sJSON = oSerializer.Serialize(evList);
evList是你的列表,包含所有具有基本属性的事件,如id,start,end,description,allDay等。
我知道这个帖子是一个旧帖子,但这对其他用户有用。
只需整理所有答案。
答案 6 :(得分:0)
我努力解决这个问题并使用.ashx处理程序解决它,如下所示
我的回程课看起来像......
public class Event
{
public Guid id { get; set; }
public string title { get; set; }
public string description { get; set; }
public long start { get; set; }
public long end { get; set; }
public bool allDay { get; set; }
}
使用...
将DateTime值转换为long值private long ConvertToTimestamp(DateTime value)
{
long epoch = (value.ToUniversalTime().Ticks - 621355968000000000) / 10000000;
return epoch;
}
ProcessRequest看起来像......
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/html";
DateTime start = new DateTime(1970, 1, 1);
DateTime end = new DateTime(1970, 1, 1);
try
{
start = start.AddSeconds(double.Parse(context.Request.QueryString["start"]));
end = end.AddSeconds(double.Parse(context.Request.QueryString["end"]));
}
catch
{
start = DateTime.Today;
end = DateTime.Today.AddDays(1);
}
List<Event> evList = new List<Event>();
using (CondoManagerLib.Linq.CondoDataContext Dc = new CondoManagerLib.Linq.CondoDataContext(AppCode.Common.CGlobals.DsnDB))
{
evList = (from P in Dc.DataDailySchedules
where P.DateBeg>=start && P.DateEnd<=end
select new Event
{ description = P.Description,
id = P.RecordGuid,
title = P.Reason,
start = ConvertToTimestamp(P.DateBeg),
end = ConvertToTimestamp(P.DateEnd),
allDay = IsAllDay(P.DateBeg, P.DateEnd)
}).ToList();
}
System.Web.Script.Serialization.JavaScriptSerializer oSerializer = new System.Web.Script.Serialization.JavaScriptSerializer();
String sJSON = oSerializer.Serialize(evList);
context.Response.Write(sJSON);
}
我的文件就绪......
> $(document).ready(function () {
> $('#calendar').fullCalendar({
> header: { left: 'title', center: 'prev,today,next', right: 'month,agendaWeek,agendaDay' },
> editable: false,
> aspectRatio: 2.1,
> events: "CalendarEvents.ashx",
> eventRender: function (event, element) {
> element.qtip({
> content: event.description,
> position: { corner: { tooltip: 'topLeft', target: 'centerLeft'} },
> style: { border: { width: 1, radius: 3, color: '#000'},
> padding: 5,
> textAlign: 'center',
> tip: true,
> name: 'cream'
> }
> });
> }
> })
> });
可以在http://craigsworks.com/projects/qtip/
找到qTip插件希望这有帮助。