【问题标题】:Calendar Questions - Icalendar library, making a actual calendar日历问题 - Icalendar 库,制作实际日历
【发布时间】:2009-12-24 19:54:52
【问题描述】:

我有一些关于日历的问题

  1. 有没有为 asp.net mvc 或 jquery 生成好的日历。想找个能做日历,有这样功能的东西。

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

    所以基本上谷歌日历可以做什么。您可以添加一个任务,然后它会弹出诸如位置、时间通知区域。

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

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

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

    因为它几乎可以满足我的要求,但主要缺点是它只执行数周而不是整月。

  2. 是否有某种库可用于轻松导入谷歌日历数据、Outlook 日历数据以及基本上任何主要的日历程序。

    我知道 icalendar 类似于标准格式,那么是否有 C# 库可以解析这些内容?

  3. 我需要将日历数据存储在数据库中。数据库表是什么样子的?

【问题讨论】:

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


    【解决方案1】:

    老实说,我认为对于客户端而言,您的要求有点过高。您最好的选择是找到开箱即用的功能,但具有足够的自定义功能以允许您填写您正在寻找的功能。要么,要么从头开始编写代码。老实说,您正在为客户端事件在前端渲染一个带有一些 jQuery 的表。这很乏味,但应该不会太难。

    至于处理日历格式的 .NET 库,我推荐DDay's iCal。它有一些问题,需要一些了解才能运行,但它可以工作(我自己将它用于我从中投影 iCalendar 条目的网站)。

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


    响应 chobo2 关于如何让数据出现在相应列中的评论,当您渲染表格时,您将拥有一个 7 x 5 的表格(7 天,5 行)。我建议用日期标记每个人。

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

    【讨论】:

    • 嗯,我正在研究如何从服务器端生成我自己的日历。 .Net 内置了诸如一个月中有多少天之类的东西,但我不确定如何让它在一周中的某一天开始。例如,十二月从星期二开始。如何让第一组数据从我的表的 3 列(第一列是星期天)开始?
    • 是的,这就是我打算做的。但是我桌子上的标题是星期日,星期一,星期二,......星期六我仍然必须用数字标记每个表格单元格(即 1,2,3 直到月底)。我不能只将第一个放在表格的第一个单元格中,因为这会表明第一个是星期日,而在 12 月的第一个是星期二。
    • @chobo2 - 我仍然没有看到问题。由于您知道每个单元格的日期,因此您可以轻松地将日期组件放入日历中。我认为您遇到的问题是您认为每个单元格都应该按天键入,而应该按 整个 日期键入。
    • 我不确定我是否跟随。对我来说,这是一个问题(我现在想通了),因为如果你查看任何日历,它的最上面写着星期几。现在,每个月的 1 日并不总是相同的。有时是星期二,有时可能是星期五。所以你必须弄清楚第一个从哪里开始,如果它从星期五开始,那么 4 个单元格要么是空白的,要么是上个月的日期。现在我正在处理下一个问题,那就是如何有效地生成具有正确数据的单元格。我不想用 30 个 if 语句来检查这些东西应该是什么单元格
    • 你有一个关于如何做到这一点的例子吗?
    【解决方案2】:

    你为什么不开始稍微不那么雄心勃勃呢? Google 有一个庞大的团队在他们的日历上工作,如果你希望在不花费数年的时间内复制它,最终只会得到一个未完成的项目。

    1

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

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

    你会得到一个dayClick 事件,你可以使用它来添加一个事件。虽然走这条路我不会费心,只是在页面上有一个单独的面板,带有一个名称文本框,一个小图标,使 Jquery UI 日历出现。这听起来技术含量低,但让点击事件在所有浏览器中工作的痛苦将是一项艰巨的任务。

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

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

    2

    如果您坚持适用于 Outlook 和 Google 的 iCalendar 格式,它们都支持它,那么为该格式编写解析器非常容易,因为它是一种非常简单的文本格式。 This question 有更多关于制作的细节,你可以使用现有的库。

    3

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

    活动 ID 姓名 地点 日期时间开始 日期时间结束 布尔 IsRecurring

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-09
      • 1970-01-01
      • 2011-10-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多