介绍

本实例介绍使用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. Xtreme9.0 - Light Gremlins 容斥

    Xtreme9.0 - Light Gremlins 题目连接: https://www.hackerrank.com/contests/ieeextreme-challenges/challenge ...

  2. $.ajax 方法参数总是记不住,在这里记录一下

    jquery中的ajax方法参数总是记不住,这里记录一下. 1.url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. 2.type: 要求为String类型的参数,请求方式(p ...

  3. resteasy经验谈

    resteasy 是java体系中比较成熟的rest框架,也是jax-rs规范的实现之一,dubbox的REST服务框架,就是采用的resteasy实现,近日在实际项目中遇到了几个问题,记录于此:   ...

  4. HTML5之Javascript多线程

    Javascript执行机制      在HTML5之前,浏览器中JavaScript的运行都是以单线程的方式工作的,虽然有多种方式实现了对多线程的模拟(例如:Javascript 中的 setint ...

  5. WAP2.0(XHTML MP)基础介绍

    (一)XHTML MP 介绍XHTML MP(eXtensible HyperText Markup Language Mobile Profile)WAP2.0与WCSS(WAP CSS /WAP ...

  6. 正余弦信号的DFT频谱分析

    一般的,对正余弦信号进行採样并DFT运算,画出频谱图,会发现频谱并不干净.这样的现象称为频谱泄漏.由于DFT运算仅仅能是有限序列,突然的截断产生了泄漏. 会有这种特殊情况.当採样截取的刚好是整数个周期 ...

  7. STM32 USART 波特率计算

    The baud rate for the receiver and transmitter (Rx and Tx) are both set to the same value as program ...

  8. Apache Kafka —一个不同的消息系统

    Apache已经发布了Kafka 0.8,也是自从成为Apache软件基金会的顶级项目后Kafka的 第一个主版本. Apache Kafka是发布—订阅消息传递,实现了分布式提交日志,适用于离线和在 ...

  9. 面试题07_用两个栈实现队列——剑指offer系列

    题目描写叙述: 用两个栈实现一个队列. 队列的声明例如以下,请实现它的两个函数appendTail 和 deleteHead.分别完毕在队列尾部插入结点和在队列头部删除结点的功能. 解题思路: 栈的特 ...

  10. iOS中block简介-作用域

    转:http://www.2cto.com/kf/201401/269467.html 用block可以定义任意的代码片段,将其像对象一样传入另一个方法:它是c级别的语法,和C语言中的函数指针非常相似 ...