dhtmlxScheduler 与 ASP.NET Core
本指南将带您一步步在服务器端使用 ASP.NET Core 创建 Scheduler。
您还可以参考其他服务端平台的教程:
- dhtmlxScheduler와 ASP.NET MVC
- dhtmlxScheduler와 Node.js
- dhtmlxScheduler와 PHP
- dhtmlxScheduler와 PHP:Slim
- dhtmlxScheduler와 PHP:Laravel 연동하기
- dhtmlxScheduler와 SalesForce LWC 통합하기
- dhtmlxScheduler와 Ruby on Rails 연동하기
- dhtmlxScheduler와 dhtmlxConnector 연동하기
数据库交互通过 Entity Framework Core 实现。示例基于 Visual Studio 2022 开发。
完整源码可在 GitHub 获取。
步骤 1. 创建项目
启动 Visual Studio 2022,选择"Create a new project"新建项目。

然后选择 "ASP.NET Core Web App",项目命名为 SchedulerApp。



至此,项目已创建完成,接下来可以添加 Scheduler 的标记和脚本。
步骤 2. 将 Scheduler 添加到页面
进入 wwwroot 目录,新建文件 index.html。

在该文件中,构建一个简单页面用于展示 scheduler。
请注意,本例中 scheduler 文件通过 CDN 加载。如果您使用的是 Professional 版本,需要 手动将 scheduler 文件添加到项目。
<!DOCTYPE html>
<html>
<head>
<title>Getting started with dhtmlxScheduler</title>
<meta charSet="utf-8"/>
<script src="https://cdn.dhtmlx.com/scheduler/edge/dhtmlxscheduler.js"></script>
<link href="https://cdn.dhtmlx.com/scheduler/edge/dhtmlxscheduler.css"
rel="stylesheet" type="text/css" charSet="utf-8">
<style>
html, body {
margin: 0px;
padding: 0px;
}
</style>
</head>
<body>
<div id="scheduler_here" className="dhx_cal_container">
<div className="dhx_cal_navline">
<div className="dhx_cal_prev_button"> </div>
<div className="dhx_cal_next_button"> </div>
<div className="dhx_cal_today_button"></div>
<div className="dhx_cal_date"></div>
<div className="dhx_cal_tab" name="day_tab"></div>
<div className="dhx_cal_tab" name="week_tab"></div>
<div className="dhx_cal_tab" name="month_tab"></div>
</div>
<div className="dhx_cal_header"></div>
<div className="dhx_cal_data"></div>
</div>
<script>
scheduler.init('scheduler_here', new Date(2019, 0, 20), "week");
</script>
</body>
</html>
然后,打开 Program.cs,配置应用以通过 wwwroot 文件夹启用静态文件,从而提供 index.html 页面。
添加 app.UseDefaultFiles() 方法。
更多细节可参考 官方文档。
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorPages();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
// The default HSTS value is 30 days.
// You may want to change this for production scenarios,
// see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseDefaultFiles(); /*!*/
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
app.UseDefaultFiles() 中间件允许应用查找并提供 wwwroot 文件夹下的默认文件:
- index.html
- index.htm
- default.html
- default.htm
您可以使用以上任一文件,本教程采用 "index.html"。
请注意,UseDefaultFiles() 只会重写 URL 指向默认文件,因此还需要 UseStaticFiles() 实际提供文件。
完成上述更改后,运行应用即可在页面上看到一个空的 scheduler。

接下来的步骤将指导您创建后端 API 并将 scheduler 连接到后端。
步骤 3. 创建模型和数据库
首先定义数据模型。scheduler 的事件需要有类表示。由于 dhtmlxScheduler 使用了与 .NET 规范不同的非标准属性名, 因此采用 数据传输对象(DTO) 模式。即:
- 为 EF Core 和应用内部使用定义领域模型类
- 为 Web API 通信定义 DTO 类
还需实现这些模型之间的映射。
模型
为项目添加新文件夹 Models,用于存放模型类和 EF 上下文。
事件模型
创建一个类用于表示日历事件。在 Models 文件夹下新建 SchedulerEvent.cs 文件。
模型示例:
namespace SchedulerApp.Models
{
public class SchedulerEvent
{
public int Id { get; set; }
public string? Name { get; set; }
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
}
}
请注意,scheduler 事件还可以包含其他属性,但本例只关注关键字段。
数据库上下文
首先为 ASP.NET Core 安装 Entity Framework Core。可通过 NuGet 包管理器安装:

或在包管理器控制台运行以下命令:
PM> Install-Package Microsoft.EntityFrameworkCore.SqlServer
PM> Install-Package Microsoft.EntityFrameworkCore
PM> Install-Package Microsoft.EntityFrameworkCore.Design
Entity Framework Core 将负责应用与数据库之间的数据 通信。
创建实体上下文
接下来,定义数据库会话并启用数据加载和保存,需创建 Context 类:
- 在 Models 文件夹下添加 SchedulerContext.cs 文件
- 数据库上下文定义如下:
using Microsoft.EntityFrameworkCore;
namespace SchedulerApp.Models
{
public class SchedulerContext : DbContext
{
public SchedulerContext(DbContextOptions<SchedulerContext> options)
: base(options)
{
}
public DbSet<SchedulerEvent> Events { get; set; } = null!;
}
}