我是新手,所以请耐心等待。我会尽我所能提供尽可能多的信息。
我有一个使用Entity Framework 6.1.1,jQuery UI(Combined Library)1.11.1和ASP.Net MVC 5.1.2 Database First的系统。我已经将Adam Shaw的FullCalendar版本2.0.4实现到我的项目中,该项目必须从数据库中读取事件并将其显示在日历上。我编写它的方式主要是为了测试目的,我正确使用它,所以我没有真正遵守任何命名约定。我搜索了许多网站寻找答案,到目前为止我还没有找到任何答案。
虽然我遇到了一些问题,但我不确定我是否应该在这里问两个问题或将它们分成不同的线程。首先,我所有的活动似乎都显示在当前的确切日期和时间。例如,如果我有事件A应该显示在2014/08/24和事件B应该显示在2014/08/26,如数据库中所述,当我运行应用程序时,它们都将显示在20:01 2014/08/27(我刚刚输入该文字的时间)。
其次,我的事件根本不可拖动或可丢弃。请参阅下面的代码。
此代码位于我的模型类中:
public partial class Event
{
public Event()
{
this.Bookings = new HashSet<Booking>();
this.EventTags = new HashSet<EventTag>();
}
public int EventID { get; set; }
public string EventName { get; set; }
public string EventDays { get; set; }
public Nullable<System.TimeSpan> EventStart { get; set; }
public Nullable<System.TimeSpan> EventEnd { get; set; }
public Nullable<decimal> EventDuration { get; set; }
public Nullable<int> NumberOfEmployees { get; set; }
public string EventLocation { get; set; }
public string EventDescription { get; set; }
public Nullable<int> EventRating { get; set; }
public Nullable<int> QuestionnaireID { get; set; }
public Nullable<System.DateTime> EventDateCreated { get; set; }
public Nullable<System.DateTime> EventDateUpdated { get; set; }
public string EventSupplier { get; set; }
public string EventPicture { get; set; }
public virtual ICollection<Booking> Bookings { get; set; }
public virtual Questionnaire Questionnaire { get; set; }
public virtual ICollection<EventTag> EventTags { get; set; }
}
我在数据库中指向的日期是“EventDateCreated”和“EventDateUpdated”。我使用“EventDateCreated”作为“start”和“EventDateUpdated”作为“结束”。
这是我控制器中的代码:
public JsonResult GetSchedules() {
var calendarObjects = new List<object>();
double start;
double end;
foreach (var item in db.Events)
{
start = ToUnixTimestamp(Convert.ToDateTime(item.EventDateCreated));
end = ToUnixTimestamp(Convert.ToDateTime(item.EventDateUpdated));
calendarObjects.Add(new
{
id = item.EventID,
title = item.EventName,
Start = start,
End = end,
allDay = false
});
}
return Json(calendarObjects.ToArray(), JsonRequestBehavior.AllowGet);
}
private static long ToUnixTimestamp(DateTime date)
{
var ts = date.ToUniversalTime().Subtract(new DateTime(1970, 1, 1, 0, 0, 0));
return (long)Math.Truncate(ts.TotalSeconds);
}
此处显示的代码循环遍历数据库类Events,并获取所有事件详细信息。 “EventDateCreated”和“EventDateUpdated”被发送到方法“ToUnixTimestamp”,该方法将日期转换为UnixTimestamp,然后返回到“GetSchedules”方法并将这些日期分配给“calendarObjects”列表。一旦分配了所有细节,它就会转到“返回”代码,将其发送到视图,然后在日历中呈现详细信息。直到“返回”代码,当鼠标悬停在“calendarObjects.ToArray()”上时,它会显示我数据库中的所有三个事件及其所有详细信息,包括每个事件的不同日期。
这是我的索引视图中的代码:
<script>
$(document).ready(function (e) {
$('#calendar').fullCalendar({
header: {
left: 'prev,next today',
center: 'title',
right: 'month,agendaWeek,agendaDay'
},
defaultView: 'month',
allDaySlot: false,
timeFormat: 'H:mm',
editable: true,
disableDragging: false,
droppable: true,
selectable: true,
slotMinutes: 15,
dayClick: function (date, allDay, jsEvent, view) {
createEvent(date);
},
events: "/Events/GetSchedules",
});
});
</script>
最后,详细信息将发送到此视图,即“索引”视图,然后呈现日历。但是,如上所述,所有事件都在同一天显示,与我运行应用程序的时间完全相同,如下面的链接所示:
为什么不在各自的日期显示事件,为什么我不能拖放它们?