日历问题 - Icalendar库,制作实际日历

时间:2009-12-24 19:54:53

标签: c# .net jquery asp.net-mvc calendar

我对日历有一些疑问

  1. 是否为asp.net mvc或jquery生成了任何好的日历。我想找一些可以制作日历并具有这样功能的东西。

    • 生成所有月份(但当然只包含当前显示的月份)
    • 如果日历事件的名称太长则会将其剪掉,如果您点击该日历事件,则弹出窗口会显示完整说明
    • 能够向日历添加新任务。因此,当您单击它时会弹出一个对话框,您可以填写信息。

    基本上Google日历可以做什么。你可以添加一个任务,然后弹出就像在哪里,时间通知区域。

    对于.net MVC或jquery,有没有这样的解决方案?如果没有,那么我愿意在需要时使用其他javascript框架,而不是。

    我检查了http://arshaw.com/fullcalendar/,它确实没有我需要的一切。

    我喜欢这个http://www.redredred.com.au/projects/jquery-week-calendar/

    因为它几乎完全符合我的要求,但主要的缺点是,这只是几个星期而不是整整一个月。

  2. 我是否可以使用某种类型的库轻松导入Google日历数据,Outlook日历数据以及基本上任何主要日历程序。

    我知道icalendar就像标准格式,所以有一个C#库可以解析这些东西吗?

  3. 我需要将日历数据存储在数据库中。数据库表格如何?

2 个答案:

答案 0 :(得分:2)

我认为,对于客户方而言,说实话,你要求的东西太多了。你最好的选择是找到你想要开箱即用的那个,但有足够的自定义,以便你填写你正在寻找的功能。要么是这样,要么从头开始编写代码。说实话,你在前端渲染一个带有一些jQuery的表,用于客户端事件。这很乏味,但不应该过于困难。

对于处理日历格式的.NET库,我建议使用DDay's iCal。它有一些问题,需要一些理解才能运行,但它可以工作(我自己用它来为我投影iCalendar条目的网站)。

至于数据库中的日历,这完全取决于您。显然,您需要的最少量信息是日期字段。我建议使用偏移量(SQL Server 2008具有datetimeoffset),因为您可能需要考虑时区。除此之外,您要存储的任何信息都取决于您。


响应chobo2关于如何使数据显示在相应列中的注释,当您呈现表时,您将拥有一个7 x 5表(七天,五行)。我建议用日期标记每一个。

然后,当您渲染表格时,在渲染单元格时,您会查看是否有任何日期事件,如果这样做,则适当地渲染单元格。

答案 1 :(得分:1)

为什么不开始雄心勃勃地开始?谷歌有一个庞大的团队在他们的日程表上工作,并希望你能够复制它,而不需要花费数年的时间就可以完成一个未完成的项目。

1

您说您不喜欢FullCalendar,但它确实支持日历中所需功能的95%,减去实际点击添加事件的日期。

  

FullCalendar非常适合显示   事件,但它不是一个完整的   事件内容管理解决方案。   除了将事件拖到一个   不同的时间/日,你无法改变   事件的名称或其他相关联的   数据。您可以添加此项   通过FullCalendar的功能   事件挂钩

您可以使用dayClick事件添加活动。尽管走这条路线我也不会打扰,只是在页面上有一个单独的面板,上面有一个名称的文本框,一个小图标,可以显示Jquery UI日历。这听起来很低技术,但让点击事件在所有浏览器中运行的痛苦将是一项艰巨的任务。

当您单击解决长文本裁剪问题的日期时,此文本框会显示完整的事件名称。或者this shows you一个很好的静态html iCal解决方案,你可能已经看过了。

生成一年的月历可以使用HTML静态完成,而不是使用jQuery。

2

如果您坚持使用支持它的Outlook和Google的iCalendar格式,那么为这种格式编写解析器非常容易,因为它是一种简单的文本格式。 This question有关于制作一个的详细信息,您可以使用现有的库。

3

如下所示的等效SQL类型的简单表就足够了:

Events
Id
Name
Location
DateTime Start
DateTime End
bool IsRecurring

重复事件将是最困难的部分,因为您必须执行计算以计算下一个事件。您不会将每个事件存储在数据库中。使用epoch进行计算可能有所帮助,这是Exchange使用的技术。