dhtmlxGantt 与 ASP.NET MVC
本教程将为您提供一个清晰、循序渐进的指南,介绍如何使用 ASP.NET 和服务器端 REST API 创建甘特图。
如果您需要其他服务器端集成方案,可以参考以下教程:
- dhtmlxGantt와 ASP.NET Core 사용하기
- dhtmlxGantt와 Node.js 연동하기
- dhtmlxGantt와 Python
- dhtmlxGantt와 PHP: Laravel 연동
- dhtmlxGantt와 PHP:Slim 연동하기
- dhtmlxGantt와 Salesforce LWC 연동하기
- dhtmlxGantt와 Ruby on Rails 연동하기
本示例使用 ASP.NET MVC 5 框架及 Web API 2 控制器来构建甘特图应用的 REST API。Entity Framework 用于管理数据库交互。开发工作将在 Visual Studio IDE 中进行。
完整源代码已发布在 GitHub。
步骤 1. 创建项目
创建新的 Visual Studio 项目
启动 Visual Studio 2022,选择 Create a new project。

然后选择 "ASP.NET Web Application",并命名为 DHX.Gantt.Web。如果未找到该模板,请参考 Troubleshooting 部分。


选择 Empty 项目模板,并确保勾选 MVC 和 Web API 选项。

步骤 2. 将 Gantt 添加到页面
创建控制器
项目创建完成后,下一步是添加一个 MVC 控制器,用于显示甘特图页面。
右键点击 Controllers 文件夹,选择 Add->Controller,然后选择 MVC 5 Controller -> Empty。将新控制器命名为 "HomeController"。

HomeController 默认包含 Index() 方法(继承自 ActionResult 类),因此无需添加额外逻辑。接下来将为该方法添加视图。
Controllers/HomeController.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace DHX.Gantt.Web.Controllers
{
public class HomeController : Controller
{
// GET: Home
public ActionResult Index()
{
return View();
}
}
}
创建视图
接下来创建首页。进入 Views/Home 文件夹,添加一个名为 Index 的空视图:

打开该视图,插入以下代码: Views/Home/Index.cshtml
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width="device-width"" />
<title>Index</title>
<link href="https://cdn.dhtmlx.com/gantt/edge/dhtmlxgantt.css"
rel="stylesheet" type="text/css" />
<script src="https://cdn.dhtmlx.com/gantt/edge/dhtmlxgantt.js"></script>
<script>
document.addEventListener("DOMContentLoaded", function(event) {
// specifying the date format
gantt.config.date_format = "%Y-%m-%d %H:%i";
// initializing gantt
gantt.init("gantt_here");
// initiating data loading
gantt.load("/api/data");
// initializing dataProcessor
var dp = new gantt.dataProcessor("/api/");
// and attaching it to gantt
dp.init(gantt);
// setting the REST mode for dataProcessor
dp.setTransactionMode("REST");
});
</script>
</head>
<body>
<div id="gantt_here" style="width: 100%; height: 100vh;"></div>
</body>
</html>
上述代码实现了以下功能:
- 为甘特图应用设置了简单的页面布局
- 通过 CDN 链接 引入了 dhtmlxGantt 的 JavaScript 和 CSS
- 在页面上初始化了甘特图
需要注意的是日期格式的配置:
Views/Home/Index.cshtml
gantt.config.date_format = "%Y-%m-%d %H:%i";
这样可以确保客户端能够正确解析从服务器接收到的日期。
此外,Gantt 配置为与后端 RESTful API 协同工作,使用 "/api/" 作为基础路由:
Views/Home/Index.cshtml
gantt.load("/api/data");
// initializing dataProcessor
var dp = new gantt.dataProcessor("/api/");
// and attaching it to gantt
dp.init(gantt);
// setting the REST mode for dataProcessor
dp.setTransactionMode("REST");
服务器端的实现将在后续介绍。此时,您可以运行应用并看到甘特图出现在页面上。

步骤 3. 创建模型和数据库
创建模型
接下来需要为甘特图定义模型类。数据模型由 Links 和 Tasks 组成。
dhtmlxGantt 的数据模型命名规范与常规 C# 命名有所不同。有些客户端属性无需存储在数据库中,但会在客户端或后端逻辑中使用。
为此,将采用 数据传输对象(DTO) 模式:领域模型类用于 EF 和内部逻辑,DTO 类用于与 Web API 通信。模型之间将实现映射。
让我们开始吧!
Task 模型
首先为 Task 创建一个类,示例如下:
Models/Task.cs
using System;
namespace DHX.Gantt.Web.Models
{
public class Task
{
public int Id { get; set; }
public string Text { get; set; }
public DateTime StartDate { get; set; }
public int Duration { get; set; }
public decimal Progress { get; set; }
public int? ParentId { get; set; }
public string Type { get; set; }
}
}
Task 对象的全部属性(包括必需和可选项)请参见 相关文档。
Link 模型
接下来创建 Link 类,如下所示:
Models/Link.cs
namespace DHX.Gantt.Web.Models
{
public class Link
{
public int Id { get; set; }
public string Type { get; set; }
public int SourceTaskId { get; set; }
public int TargetTaskId { get; set; }
}
}