Fullcalendar事件全部显示在当前日期时间

时间:2014-08-27 18:17:49

标签: c# asp.net-mvc fullcalendar ef-database-first

我是新手,所以请耐心等待。我会尽我所能提供尽可能多的信息。

我有一个使用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>

最后,详细信息将发送到此视图,即“索引”视图,然后呈现日历。但是,如上所述,所有事件都在同一天显示,与我运行应用程序的时间完全相同,如下面的链接所示:

Calendar View

为什么不在各自的日期显示事件,为什么我不能拖放它们?

0 个答案:

没有答案