介绍

本实例介绍使用DayPilot Lite for ASP.NET MVC library 类来实现类google日历效果。

在线实例

  • 行代码来实现ajax 添加备忘,拖放

    首先准备:

  • 类库:在你的项目中引入 DayPilot.Web.Mvc.dll 
  • 视图: 使用 Html.DayPilotCalendar扩展建立一个DayPilot Calendar 
  • 控制器: 建立一个 MVC 控制器

    1. DayPilot.Web.Mvc 类库

    下载 DayPilot Lite for ASP.NET MVC 包

    在 Scripts 文件夹中复制 DayPilot JavaScript 到你的项目(Scripts/DayPilot):

  • daypilot-all.min.js

    从bin目录复制DayPilot.Web.Mvc.dll 到你的项目 (Bin).

    添加 DayPilot.Web.Mvc.dll引用:

    2. MVC 视图(8行代码)

    建立一个 ASP.NET MVC 视图 (Views/Home/Index.cshtml):

    @{ ViewBag.Title = "ASP.NET MVC Razor Event Calendar"; }

    <h2>ASP.NET MVC Razor Event Calendar</h2>

    添加 DayPilot JavaScript :

    <script src="@Url.Content("~/Scripts/DayPilot/daypilot-all.min.js")" type="text/javascript"></script>

    添加日历初始化代码

    @Html.DayPilotCalendar("dpc", new DayPilotCalendarConfig

    {

    BackendUrl = Url.Content("~/Home/Backend"),

    })

    Note that the minimum required code is quite short. It only has to point to the backend MVC controller ("~/Home/Backend") that will supply the calendar event data using an AJAX call.

    在配置中添加DayPilot.Web.Mvc 命名空间以支持Html.DayPilotCalendar:

    <configuration>

    <system.web.webPages.razor>

    <pages pageBaseType="System.Web.Mvc.WebViewPage">

    <namespaces>

    ...

    <add namespace="DayPilot.Web.Mvc"/>

    </namespaces>

    </pages>

    </system.web.webPages.razor></configuration>

    完整代码:

    @{ ViewBag.Title = "ASP.NET MVC Razor Event Calendar"; }

    <h2>ASP.NET MVC Razor Event Calendar</h2>

    <script src="@Url.Content("~/Scripts/DayPilot/daypilot-all.min.js")" type="text/javascript"></script>

    @Html.DayPilotCalendar("dpc", new DayPilotCalendarConfig

    {

    BackendUrl = Url.Content("~/Home/Backend"),

    })

    3. MVC 控制器(34 行代码)

    建立一个 MVC 控制器(Controllers/HomeController.cs):

    public class HomeController : Controller

    {

    public ActionResult Index()

    {

    return View();

    }

    }

    为日历添加一个 handler 叫作/Home/Backend.

    public ActionResult Backend()

    {

    return new Dpc().CallBack(this);

    }

    DayPilotCalendar:

    class Dpc : DayPilotCalendar

    {

    protected override void OnInit(InitArgs e)

    {

    var db = new DataClasses1DataContext();

    Events = from ev in db.events select ev;

    DataIdField = "id";

    DataTextField = "text";

    DataStartField = "eventstart";

    DataEndField = "eventend";

    Update();

    }

    }

    我们使用 linq to sql从一个sql数据库取得数据 (DataClasses1.dbml).

    "events" 表结构

    DataIdField = "id";

    DataTextField = "text";

    DataStartField = "eventstart";

    DataEndField = "eventend";

    所有动作将引发 Update()

    这里是日历所有的控制器代码:(使用ajax)

     Collapse | Copy Code

    using System;

    using System.Linq;

    using System.Web;

    using System.Web.Mvc;

    using DayPilot.Web.Mvc;

    using DayPilot.Web.Mvc.Events.Calendar;

    namespace DayPilotCalendarMvc3.Controllers

    {

    public class HomeController : Controller

    {

    public ActionResult Index()

    {

    return View();

    }

    public ActionResult Backend()

    {

    return new Dpc().CallBack(this);

    }

    class Dpc : DayPilotCalendar

    {

    protected override void OnInit(InitArgs e)

    {

    var db = new DataClasses1DataContext();

    Events = from ev in db.events select ev;

    DataIdField = "id";

    DataTextField = "text";

    DataStartField = "eventstart";

    DataEndField = "eventend";

    Update();

    }

    }

    }

    }

    4. 添加AJAX拖放事件 (38行代码)

    为了支持拖放,我们需要添加以下代码:

    @Html.DayPilotCalendar("dpc", new DayPilotCalendarConfig

    {

    BackendUrl = Url.Content("~/Home/Backend"),

    EventMoveHandling = DayPilot.Web.Mvc.Events.Calendar.EventMoveHandlingType.CallBack,

    EventResizeHandling = DayPilot.Web.Mvc.Events.Calendar.EventResizeHandlingType.CallBack,

    TimeRangeSelectedHandling = DayPilot.Web.Mvc.Events.Calendar.TimeRangeSelectedHandlingType.JavaScript,

    TimeRangeSelectedJavaScript = "dpc.timeRangeSelectedCallBack(start,

    end, null, { name: prompt('New Event Name:', 'New Event') });"

    })

    事件处理

    using System;

    using System.Linq;

    using System.Web.Mvc;

    using DayPilot.Web.Mvc;

    using DayPilot.Web.Mvc.Enums;

    using DayPilot.Web.Mvc.Events.Calendar;

    namespace DayPilotCalendarMvc3.Controllers

    {

    public class HomeController : Controller

    {

    public ActionResult Index()

    {

    return View();

    }

    public ActionResult Backend()

    {

    return new Dpc().CallBack(this);

    }

    class Dpc : DayPilotCalendar

    {

    DataClasses1DataContext db = new DataClasses1DataContext();

    protected override void OnInit(InitArgs e)

    {

    Update(CallBackUpdateType.Full);

    }

    protected override void OnEventResize(EventResizeArgs e)

    {

    var toBeResized = (from ev in db.Events where ev.id == Convert.ToInt32(e.Id) select ev).First();

    toBeResized.eventstart = e.NewStart;

    toBeResized.eventend = e.NewEnd;

    db.SubmitChanges();

    Update();

    }

    protected override void OnEventMove(EventMoveArgs e)

    {

    var toBeResized = (from ev in db.Events where ev.id == Convert.ToInt32(e.Id) select ev).First();

    toBeResized.eventstart = e.NewStart;

    toBeResized.eventend = e.NewEnd;

    db.SubmitChanges();

    Update();

    }

    protected override void OnTimeRangeSelected(TimeRangeSelectedArgs e)

    {

    var toBeCreated = new Event {eventstart = e.Start,

    eventend = e.End, text = (string) e.Data["name"]};

    db.Events.InsertOnSubmit(toBeCreated);

    db.SubmitChanges();

    Update();

    }

    protected override void OnFinish()

    {

    if (UpdateType == CallBackUpdateType.None)

    {

    return;

    }

    Events = from ev in db.Events select ev;

    DataIdField = "id";

    DataTextField = "text";

    DataStartField = "eventstart";

    DataEndField = "eventend";

    }

    }

    }

    }

    5. 星期视图 (+1行)

    切换到日历视图非常简单

    ViewType = DayPilot.Web.Mvc.Enums.Calendar.ViewType.Week,

    @Html.DayPilotCalendar("dpc", new DayPilotCalendarConfig

    {

    BackendUrl = Url.Content("~/Home/Backend"),

    ViewType = DayPilot.Web.Mvc.Enums.Calendar.ViewType.Week,

    EventMoveHandling = DayPilot.Web.Mvc.Events.Calendar.EventMoveHandlingType.CallBack,

    EventResizeHandling = DayPilot.Web.Mvc.Events.Calendar.EventResizeHandlingType.CallBack,

    TimeRangeSelectedHandling = DayPilot.Web.Mvc.Events.Calendar.TimeRangeSelectedHandlingType.JavaScript,

    TimeRangeSelectedJavaScript =

    "dpc.timeRangeSelectedCallBack(start, end, null, { name: prompt('New Event Name:', 'New Event') });"

    })

    月视图

    翻译自外网。

超简单!80行代码实现Google日历(拖放、移动、AJAX)的更多相关文章

  1. 超级简单!80行代码实现Google日历(拖放、移动、AJAX)

    行代码实现Google日历 Introduction 本实例介绍使用DayPilot Lite for ASP.NET MVC library 类来实现类google日历效果. 在线实例 天视图  星 ...

  2. 通过 C# 代码操作 Google 日历

    原文:通过 C# 代码操作 Google 日历 本文主题 借助 Google .NET APIs Client Library,通过 C# 代码在 Google 日历中创建会议邀请. 本文背景 最近, ...

  3. 80 行代码爬取豆瓣 Top250 电影信息并导出到 CSV 及数据库

    一.下载页面并处理 二.提取数据 观察该网站 html 结构 可知该页面下所有电影包含在 ol 标签下.每个 li 标签包含单个电影的内容. 使用 XPath 语句获取该 ol 标签 在 ol 标签中 ...

  4. 80行代码教你写一个Webpack插件并发布到npm

    1. 前言 最近在学习 Webpack 相关的原理,以前只知道 Webpack 的配置方法,但并不知道其内部流程,经过一轮的学习,感觉获益良多,为了巩固学习的内容,我决定尝试自己动手写一个插件. 这个 ...

  5. python3 80行代码实现贪吃蛇

    上面是实现的截图,废话不说,直接开始说一下代码 pos = { 'UP': (-1,0), 'DOWN':(+1,0), 'LEFT':(0,-1), 'RIGHT':(0,+1), } curren ...

  6. 简单几行代码使用百度地图API接口分页获取信息

    首发于: 万能助手扩展开发:使用百度地图API接口分页获取信息_电脑计算机编程入门教程自学 http://jianma123.com/viewthread.aardio?threadid=426 使用 ...

  7. 【转】如何恶搞朋友的电脑?超简单的vbs代码

    源地址:https://jingyan.baidu.com/article/d3b74d64aa1e6a1f77e609e6.html 表白源地址:https://jingyan.baidu.com/ ...

  8. 厉害了,Google大神每天写多少行代码?

    文章转自开源中国社区,编译自:Quora Quora上有个有趣的问题:Google工程师们每天写多少行代码? Google 的 AdMob 全栈工程师 Raymond Farias 在 Quora 发 ...

  9. 实现超简单的http服务器

    想在Linux下实现一个简单的web Server并不难.一个最简单的HTTP Server不过是一个高级的文件服务器,不断地接收客户端(浏览器)发送的HTTP请求,解析请求,处理请求,然后像客户端回 ...

随机推荐

  1. java string 替换img标签 正则表达式 任意多个字符

    正则表达式 任意多个字符 (.*)  正则表达式中,“.”(点符号)匹配的是除了换行符“\n”以外的所有字符 要匹配包括 '\n' 在内的任何字符,([\s\S]*) 也可以用 “([\d\D]*)” ...

  2. CS1.6找金钱和人物血量

    一.查找金钱数量 先搜索800 然后购买东西,再搜索剩下的钱 然后发现有两个地址,一个绿色的地址(也就是静态地址),还有一个动态地址 经过测试后,静态地址的值是对应屏幕上的值,而真正实际的金钱是那个动 ...

  3. mySql---数据库索引原理及优化

    一.写在前面 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型 ...

  4. CentOS 7设置KVM硬盘模式为SCSI

    找到一下节点,把target节点的dev改成s开头,bus改成scsi即可,并删除address节点: 以此内推,如果要修改为ide需要修改dev为h开头,bus改成ide. 参考: https:// ...

  5. MySQL错误:TIMESTAMP with implicit DEFAULT value is deprecated

    用于存放数据库的文件夹不为空,清空了再来一次!

  6. 任务调度框架Hangfire 简介

    任务调度是我们项目中常见的功能,虽然任务调度的功能实现本身并不难,但一个好用的轮子还是可以给我们的开发的效率提升不少的. 在.net环境中,较为有名的任务调度框架是HangFire与Quartz.NE ...

  7. Renesas M16C/6X -- Simple PWM Signal Generation Using DMA

    1. Requirements To generate a PWM output, we need to create a train of pulses with constant period a ...

  8. Android论坛

    APKBUS:http://www.apkbus.com/forum.php 看雪ANDROID:http://bbs.pediy.com http://www.52pojie.cn http://w ...

  9. HDU 1428 漫步校园 (BFS+优先队列+记忆化搜索)

    题目地址:HDU 1428 先用BFS+优先队列求出全部点到机房的最短距离.然后用记忆化搜索去搜. 代码例如以下: #include <iostream> #include <str ...

  10. 推荐一个文献翻译软件--Deja Vu X

    首先我的这篇博客推荐的软件并非你觉得翻译精确度有多高的软件,假设是这种话就不用往下看了,免得浪费时间,仅仅是一个对于翻译文献非常方便的工具,方面在哪请看下文. 我是不会告诉你凡事用过这个软件的人都说好 ...