使用ASP.NET从CodeBehind中获取JSON和其他“无标准”字段。
将“ obj”传递给addEventSource时,我正确获取了“标准”标题,开始,结束,颜色,类名。
问题是我想使用“ 事件”和“ eventRender ”代替使用“ addEventSource ”来处理“无标准”字段,这是行不通的。
是否可以将对象或JSON传递给“ 事件”?
我还尝试使用“ docd ”(none parseJSON字符串)在日历中未显示任何结果。使用FullCalendar 3
例如。
events: obj,
eventRender: function(event, element) {
Console.log(info.event.extendedProps.PrjectID)
}
这是请求Ajax:
$.ajax({
type: "POST",
url: "Calender.aspx/GetTimeData",
contentType: "application/json; charset=utf-8",
data: JSON.stringify({ 'year': year, 'month': month, 'projectID': projectid }),
dataType: "json"
}).done(function (doc) {
var events = [];
docd = doc.d;
obj = $.parseJSON(doc.d);
}
});
其他参数:
ProjectID,UserID,WorkTypeID,Signed
Json:
[{"Signed":1,"ProjectID":39,"WorkTypeid":1,"UserID":97,"id":719627,"start":"2019-01-01T07:00:00","end":"2019-01-01T15:00:00","title":"Test Title ","color":"#607d8b","className":null}]
*********************更新1 *********************
编辑了代码,在全日历环境中实施时,ajax请求可以正常工作,但帖子不会出现在日历中,“ eventRender ”也不会出现在日历中没有触发。
$('#calendar').fullCalendar({
loading: function (bool) {
//LoadEvents();
//alert('events are being rendered'); // Add your script to show loading
},
eventAfterAllRender: function (view) {
//alert('all events are rendered'); // remove your loading
},
navLinks: true,
lazyFetching: false,
height: "auto",
aspectRatio: 2,
weekends: true,
weekNumbers: true,
displayEventEnd: true,
showNonCurrentDates: false,
weekLabel: "V",
allLocales: true,
locale: "sv",
header: false,
//header: {
// //left: 'prev,next today',
// left: '',
// center: '',
// right: 'month,agendaWeek,agendaDay,listMonth'
//},
viewRender: function (element, view) {
var title = view.title;
$("#CalendarHeadTitle").html(title);
//element.find('.fc-title').append("-test-");
},
dayClick: function (date, jsEvent, view) {
$("#sDate, #eDate").val(moment(date).format("YYYY-MM-DD"));
$('.modal').modal('show');
},
eventClick: function (info) {
$('.modal').modal('show');
},
eventDrop: function (event, delta, revertFunc) {
//TODO: Implement - call to move!
if (!confirm("Vill du flytta ")) {
revertFunc();
}
},
editable: true,
events: function (start, end, timezone, callback) {
$.ajax({
type: "POST",
url: "Calender.aspx/GetTimeData",
contentType: "application/json; charset=utf-8",
data: JSON.stringify({ 'year': $("#<%=DdlYear.ClientID%>").val(), 'month': $("#<%=DdlMonth.ClientID%>").val(), 'projectID': $("#<%=DdlProjects.ClientID%>").val() }),
dataType: "json"
}).done(function (doc) {
var events = $.parseJSON(doc.d);
console.log(doc.d);
callback(events); //this provided callback function passes the event data back to fullCalendar
});
},
eventRender: function (event, element) {
console.log('event render action');
}
});
答案 0 :(得分:1)
我认为您正在混淆fullCalendar 3和fullCalendar 4的语法和功能。它们是very different。
Console.log(info.event.extendedProps.PrjectID)
将失败,因为
a)您尚未在函数参数中定义info
变量(因此,尽管您没有提到一个变量,但仍应收到控制台错误),并且
b)即使您修复了该错误,我也强烈怀疑(根据您用于eventRender函数的签名以及您广泛使用jQuery的事实),您实际上正在使用fullCalendar 3,其event object没有“ extendedProps”属性。
如果我的假设是正确的,那么我会期望的
console.log(event.ProjectID);
输出所需数据。
P.S。您的代码显示在上下文之外,因此我不确定您如何加载事件,但是您不需要在日历环境之外进行AJAX调用然后传递的过程生成的数组稍后发送到日历。而是使用fullCalendar的内置功能之一处理动态事件源。在您的情况下,events-as-a-function选项可能是最合适的。 这是推荐的将数据连接到日历的方法。
您可以这样实现:
events: function( start, end, timezone, callback ) {
$.ajax({
type: "POST",
url: "Calender.aspx/GetTimeData",
contentType: "application/json; charset=utf-8",
data: JSON.stringify({ 'year': year, 'month': month, 'projectID': projectid }),
dataType: "json"
}).done(function (doc) {
var events = $.parseJSON(doc.d);
callback(events); //this provided callback function passes the event data back to fullCalendar
});
}
FullCalendar每次需要新事件时都会运行此代码(例如,当日历加载时,以及每当用户更改日历视图以涵盖尚未获取事件的日期范围时)。如您所见,fullCalendar通过回调参数为您提供了start
和end
日期,您可以将它们直接传递给服务器,以帮助它过滤返回的事件列表以覆盖所需的日期范围。您的代码当前接受“月”和“年”,因此可以从开始日期中获取它们,但是,如果您使用的不是“月”视图,则这不够灵活。