可能这是一个重复的问题,但对我来说没办法。 单击完整日历中的上一个和下一个按钮时,我必须显示值。我正在使用ajax和值正确返回在控制台中可见。现在我有两个问题
当我点击这些按钮时,WebMethod总是会点击。 这是我的控制台中的结果。
Array(6)
0
:
{EventID: "00000000-0000-0000-0000-000000000000", EventName: "Presnt", StartDate: "01-08-2017", EndDate: null, ImageType: 0, …}
1
:
{EventID: "00000000-0000-0000-0000-000000000000", EventName: "Presnt", StartDate: "02-08-2017", EndDate: null, ImageType: 0, …}
2
:
{EventID: "00000000-0000-0000-0000-000000000000", EventName: "Presnt", StartDate: "03-08-2017", EndDate: null, ImageType: 0, …}
3
:
{EventID: "00000000-0000-0000-0000-000000000000", EventName: "Presnt", StartDate: "04-08-2017", EndDate: null, ImageType: 0, …}
4
:
{EventID: "00000000-0000-0000-0000-000000000000", EventName: "Presnt", StartDate: "07-08-2017", EndDate: null, ImageType: 0, …}
5
:
{EventID: "00000000-0000-0000-0000-000000000000", EventName: "Presnt", StartDate: "08-08-2017", EndDate: null, ImageType: 0, …}
length
:
6
Jquery的
$(document).ready(function () {
$('div[id*=calendar1]').show();
$('div[id*=calendar1]').fullCalendar({
header: {
left: 'prev,next today',
center: 'title',
right: 'month,agendaWeek,agendaDay'
},
events: function (start, end,timezone, callback) {
$.ajax({
type: "POST",
contentType: "application/json",
data: "{Start:'" + start + "',End:'" + end + "'}",
url: "attendance-full.aspx/GetEvents",
dataType: "json",
// Old Code
//success: function (data) {
// console.log(data);
// for (var i = 0; i < data.d.length; i++) {
// var event = new Object();
// event.id = data.d[i].EventName;
// event.start = new Date(data.d[i].StartDate);
// event.title = data.d[i].EventName;
// return event;
// }
//}
//New Code
success: function (doc) {
console.log(doc);
var my_events = [];
if (!doc.result) {
$.each(doc.d, function (index, elem) {
my_events.push({
id:elem.EventName,
title: elem.EventName,
start: elem.StartDate,
});
});
callback(my_events);
}
}
});
}
});
$('#loading').hide();
$('div[id*=fullcal]').show();
});
背后的代码
[WebMethod]
public static IList GetEvents(string Start, string End)
{
String Date = "10/01/2016";
IList events = new List<Event>();
//Hard coded the date for testing yyyy-MM-dd
DateTime startDate = Convert.ToDateTime("2017-08-01");//Convert.ToDateTime(Date);
DateTime endDate = Convert.ToDateTime("2017-08-31");//StartDate.AddMonths(1);
SqlConnection con1 = new SqlConnection(Connection.str);
BLL_Attentance Att = new BLL_Attentance();
DataSet ds = new DataSet();
double OS_Idno = 2587470;
string AccYear = "2017-2018";
try
{
DataTable dt = Att.AttentanceLoadFull(Convert.ToDouble(1236), 3, startDate.ToString(), endDate.ToString(), AccYear);//OP_sp_Attendance_Load
ds.Tables.Add(dt);
}
catch (Exception ex)
{
ex.Message.ToString();
}
for (DateTime i = startDate; i < endDate; i = i.AddDays(1))
{
if (ds.Tables[0].Rows.Count > 0)
{
// to check ds contains the current date
DataRow[] Date1 = ds.Tables[0].Select("OSA_Dateofattendance = '" + i + "'");
if (Date1.Count() == 0)
{
}
else
{
string flag = "Present";
/*New Code*/
DataTable ds3 = new DataTable();
string sub = "2017-2018".Substring(0, 4);
string OS_Attendance = "OS_Attendance" + sub;
SqlDataAdapter sda3 = new SqlDataAdapter("select Oid from " + OS_Attendance.ToString() + " where Oattn_date='" + i.ToString("MM-dd-yyyy") + "' and M_idno='" + 3 + "' and Oattn_acadyear='2017-2018' and Os_idno='" + OS_Idno + "'", con1);
sda3.Fill(ds3);
/*New Code End*/
if (ds3.Rows.Count > 0)
{
flag = "Absent";
}
if (flag == "Absent")
{
events.Add(new Event
{
EventName = "Absent",
StartDate = i.ToString("dd-MM-yyyy"),
});
}
else
{
events.Add(new Event
{
EventName = "Presnt",
StartDate = i.ToString("dd-MM-yyyy"),
});
}
}
}
}
return events;
}
public class Event
{
public Guid EventID { get { return new Guid(); } }
public string EventName { get; set; }
public string StartDate { get; set; }
public string EndDate { get; set; }
public int ImageType { get; set; }
public string Url { get; set; }
}
此处结果仅显示2017-08-01和2017-08-31之间的数据。 2017年8月未显示任何数据。请帮帮我
已修改
我更改了我的ajax代码,它将指定为新代码,然后是日历显示 2017年7月7日的单一日期没有显示其他日期 Click the link to view my result。 在控制台中找到错误
moment.min.js:6 Deprecation warning: moment construction falls back to js Date. This is discouraged and will be removed in upcoming major release. Please refer to https://github.com/moment/moment/issues/1407 for more info.
Error
at $ (http://localhost:4047/assets/global/plugins/moment.min.js:6:6788)
at http://localhost:4047/assets/global/plugins/moment.min.js:6:25765
at http://localhost:4047/assets/global/plugins/moment.min.js:6:145
at http://localhost:4047/assets/global/plugins/moment.min.js:6:149
答案 0 :(得分:2)
在你的ajax函数结束时,你不是通过提供的回调将数据发送到fullCalendar,而是在你读完一个单独的事件后从函数返回。删除“return”语句,并添加对回调函数的调用:
success: function (data) {
console.log(data);
for (var i = 0; i < data.d.length; i++) {
var event = new Object();
event.id = data.d[i].EventName;
event.start = new Date(data.d[i].StartDate);
event.title = data.d[i].EventName;
}
callback(data);
}
这是根据以下示例:https://fullcalendar.io/docs/event_data/events_function/
至于你的第二点 - 那不是fullCalendar的工作方式。您的服务器方法需要足够灵活,以接受任何给定的开始/结束日期。这是因为除了“月”之外还有其他视图类型,包括您可以在某些议程和列表视图中完全自定义显示的日期(例如2周,3 1/2周,无论您喜欢什么)。因此,默认情况下,该方法会提供应返回的事件的确切日期范围。
查看您的查询,您有一个出勤日期字段,因此您应该能够使用<
和>
使用单个SQL语句以及从中传入的开始/结束日期fullCalendar获取事件记录。目前尚不清楚为什么你需要月份数,或者为什么要进行循环并为范围内的每个日期运行i
个单独的查询 - 这可能效率很低。您的数据结构看起来也很可疑 - 您似乎每个学年都有单独的表格?如果是这样,这将严重降低标准化,并且在精心设计的数据库中也不一定非必要。只是要考虑一些事情。