FullCalendar 未显示在 Asp.Net 核心 Razor 视图中
FullCalendar not showing up in Asp.Net Core Razor View
我一直在关注这个视频教程:https://youtu.be/IpCEfbLiwag 希望实现一个包含 FullCalendar 的页面,其中包含来自数据库的 Task
table 的日期。虽然没有必要通过视频来提供帮助,但我认为将源也包括在内是个不错的主意。
我还对我的代码进行了一些更改,所以这是我的 CalendarController。
public ActionResult Index()
{
return View();
}
public JsonResult GetEvents()
{
List<TaskModel> taskList = new List<TaskModel>();
string connectionString = Configuration["ConnectionStrings:DefaultConnection"];
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
string sql = "ReadAllTasks";
SqlCommand command = new SqlCommand(sql, connection);
command.CommandType = CommandType.StoredProcedure;
using (SqlDataReader dataReader = command.ExecuteReader())
{
while (dataReader.Read())
{
TaskModel task = new TaskModel();
task.Id = Convert.ToInt32(dataReader["Id"]);
task.Name = Convert.ToString(dataReader["Name"]);
.....................
task.Comments = Convert.ToString(dataReader["Comments"]);
task.StartDate = Convert.ToDateTime(dataReader["StartDate"]);
task.EndDate = Convert.ToDateTime(dataReader["EndDate"]);
.....................
if (task.DependencyId == 1)
{
task.DependencyId = Convert.ToInt32(dataReader["DependencyId"]);
}
task.PhaseId = Convert.ToInt32(dataReader["PhaseId"]);
taskList.Add(task);
}
}
connection.Close();
}
return new JsonResult(taskList);
}
基本上,使用存储过程,我从 sql 服务器获取所有任务,将它们放在一个列表中,然后 return 它们以 Json 格式,如下所示:
(这是我调用 /Calendar/GetEvents 时得到的结果)
[{"id":3,"name":"New Task","isGate":false,"condition":"","precondition":"","comments":"","startDate":"2012-12-12T11:11:00","endDate":"2014-12-12T11:11:00","inProgress":true,"finished":false,"aborted":false,"assignedTo":"1fa2f008-f7fe-43ba-9c5d-fd9e67e995d3","assignedToName":null,"dependencyId":0,"phaseId":1},{"id":1004,"name":"New Task","isGate":false,"condition":"","precondition":"","comments":"","startDate":"2012-12-12T11:11:00","endDate":"2014-12-12T11:11:00","inProgress":false,"finished":true,"aborted":false,"assignedTo":"1fa2f008-f7fe-43ba-9c5d-fd9e67e995d3","assignedToName":null,"dependencyId":0,"phaseId":1},{"id":1008,"name":"New Task","isGate":false,"condition":"","precondition":"","comments":"","startDate":"2012-12-12T11:11:00","endDate":"2014-12-12T11:11:00","inProgress":false,"finished":true,"aborted":false,"assignedTo":"5a4b508f-5e12-418f-9ce4-8e3061b833fe","assignedToName":null,"dependencyId":0,"phaseId":2012},{"id":3004,"name":"New Task","isGate":false,"condition":"","precondition":"","comments":"","startDate":"2012-12-12T11:11:00","endDate":"2014-12-12T11:11:00","inProgress":false,"finished":false,"aborted":false,"assignedTo":"711f2295-d8a4-49dd-88be-ea7143aa11d8","assignedToName":null,"dependencyId":0,"phaseId":1}]
现在,可能是最重要的部分了。 Index.cshtml 包含以下内容:
<!DOCTYPE html>
<html lang='en'>
<head>
<link href="https//maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" type="text/css" rel="stylesheet" />
<link href="https//cdnjs.cloudflare.com/ajax/libs/fullcalendar/2.6.1/fullcalendar.min.css" type="text/css" rel="stylesheet" />
</head>
<body>
<div class="container">
<div class="row">
<div class="col-xs-12">
<br />
<div id="bootstrapModalFullCalendar">
</div>
</div>
</div>
</div>
<div id="fullCalModal" class="modal fade">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">x</span> <span class="sr-only">close</span></button>
<h4 id="modalTitle" class="modal-title"></h4>
</div>
<div id="modalBody" class="modal-body"></div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
<a class="btn btn-primary" id="eventUrl">Event Page</a>
</div>
</div>
</div>
</div>
<script src="https://code.jquery.com/jquery.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.8.2/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/fullcalendar/2.6.1/fullcalendar.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
<script>
$(document).ready(function () {
$('#bootstrapModalFullCalendar').fullCalendar({
header: {
left: '',
center: 'prev title next',
right: ''
},
eventClick: function (event, jsEvent, view) {
$('#modalTitle').html(event.Name);
$('#modalBody').html(event.Comments);
$('#eventUrl').attr('href', event.url);
$('#fullCalModal').modal();
return false;
},
events: '@Url.Action("GetEvents","Calendar")'
});
});
</script>
</body>
</html>
当我转到 Calendar/Index 时,只有一个空白页面。我在控制台中没有收到任何错误或警告。出了什么问题?
您的数据似乎有误。当我将您的 HTML 与我的自定义数据(来自一个工作示例)一起使用时,它呈现得很好
我想你需要看看这里:
Event Source Object
您定义了不在全日历中的选项。
您应该考虑在控制器中格式化文本。控制器可以 return 和应该工作的示例之一:
[{
"id": 150,
"start": "2019-10-28",
"end": "2019-10-28",
"title": "Some preformatted text returned by the controller",
"allDay": true,
"url": null,
"color": null,
"textColor": null,
"backgroundColor": "green"
}]
我一直在关注这个视频教程:https://youtu.be/IpCEfbLiwag 希望实现一个包含 FullCalendar 的页面,其中包含来自数据库的 Task
table 的日期。虽然没有必要通过视频来提供帮助,但我认为将源也包括在内是个不错的主意。
我还对我的代码进行了一些更改,所以这是我的 CalendarController。
public ActionResult Index()
{
return View();
}
public JsonResult GetEvents()
{
List<TaskModel> taskList = new List<TaskModel>();
string connectionString = Configuration["ConnectionStrings:DefaultConnection"];
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
string sql = "ReadAllTasks";
SqlCommand command = new SqlCommand(sql, connection);
command.CommandType = CommandType.StoredProcedure;
using (SqlDataReader dataReader = command.ExecuteReader())
{
while (dataReader.Read())
{
TaskModel task = new TaskModel();
task.Id = Convert.ToInt32(dataReader["Id"]);
task.Name = Convert.ToString(dataReader["Name"]);
.....................
task.Comments = Convert.ToString(dataReader["Comments"]);
task.StartDate = Convert.ToDateTime(dataReader["StartDate"]);
task.EndDate = Convert.ToDateTime(dataReader["EndDate"]);
.....................
if (task.DependencyId == 1)
{
task.DependencyId = Convert.ToInt32(dataReader["DependencyId"]);
}
task.PhaseId = Convert.ToInt32(dataReader["PhaseId"]);
taskList.Add(task);
}
}
connection.Close();
}
return new JsonResult(taskList);
}
基本上,使用存储过程,我从 sql 服务器获取所有任务,将它们放在一个列表中,然后 return 它们以 Json 格式,如下所示:
(这是我调用 /Calendar/GetEvents 时得到的结果)
[{"id":3,"name":"New Task","isGate":false,"condition":"","precondition":"","comments":"","startDate":"2012-12-12T11:11:00","endDate":"2014-12-12T11:11:00","inProgress":true,"finished":false,"aborted":false,"assignedTo":"1fa2f008-f7fe-43ba-9c5d-fd9e67e995d3","assignedToName":null,"dependencyId":0,"phaseId":1},{"id":1004,"name":"New Task","isGate":false,"condition":"","precondition":"","comments":"","startDate":"2012-12-12T11:11:00","endDate":"2014-12-12T11:11:00","inProgress":false,"finished":true,"aborted":false,"assignedTo":"1fa2f008-f7fe-43ba-9c5d-fd9e67e995d3","assignedToName":null,"dependencyId":0,"phaseId":1},{"id":1008,"name":"New Task","isGate":false,"condition":"","precondition":"","comments":"","startDate":"2012-12-12T11:11:00","endDate":"2014-12-12T11:11:00","inProgress":false,"finished":true,"aborted":false,"assignedTo":"5a4b508f-5e12-418f-9ce4-8e3061b833fe","assignedToName":null,"dependencyId":0,"phaseId":2012},{"id":3004,"name":"New Task","isGate":false,"condition":"","precondition":"","comments":"","startDate":"2012-12-12T11:11:00","endDate":"2014-12-12T11:11:00","inProgress":false,"finished":false,"aborted":false,"assignedTo":"711f2295-d8a4-49dd-88be-ea7143aa11d8","assignedToName":null,"dependencyId":0,"phaseId":1}]
现在,可能是最重要的部分了。 Index.cshtml 包含以下内容:
<!DOCTYPE html>
<html lang='en'>
<head>
<link href="https//maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" type="text/css" rel="stylesheet" />
<link href="https//cdnjs.cloudflare.com/ajax/libs/fullcalendar/2.6.1/fullcalendar.min.css" type="text/css" rel="stylesheet" />
</head>
<body>
<div class="container">
<div class="row">
<div class="col-xs-12">
<br />
<div id="bootstrapModalFullCalendar">
</div>
</div>
</div>
</div>
<div id="fullCalModal" class="modal fade">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">x</span> <span class="sr-only">close</span></button>
<h4 id="modalTitle" class="modal-title"></h4>
</div>
<div id="modalBody" class="modal-body"></div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
<a class="btn btn-primary" id="eventUrl">Event Page</a>
</div>
</div>
</div>
</div>
<script src="https://code.jquery.com/jquery.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.8.2/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/fullcalendar/2.6.1/fullcalendar.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
<script>
$(document).ready(function () {
$('#bootstrapModalFullCalendar').fullCalendar({
header: {
left: '',
center: 'prev title next',
right: ''
},
eventClick: function (event, jsEvent, view) {
$('#modalTitle').html(event.Name);
$('#modalBody').html(event.Comments);
$('#eventUrl').attr('href', event.url);
$('#fullCalModal').modal();
return false;
},
events: '@Url.Action("GetEvents","Calendar")'
});
});
</script>
</body>
</html>
当我转到 Calendar/Index 时,只有一个空白页面。我在控制台中没有收到任何错误或警告。出了什么问题?
您的数据似乎有误。当我将您的 HTML 与我的自定义数据(来自一个工作示例)一起使用时,它呈现得很好
我想你需要看看这里: Event Source Object
您定义了不在全日历中的选项。 您应该考虑在控制器中格式化文本。控制器可以 return 和应该工作的示例之一:
[{
"id": 150,
"start": "2019-10-28",
"end": "2019-10-28",
"title": "Some preformatted text returned by the controller",
"allDay": true,
"url": null,
"color": null,
"textColor": null,
"backgroundColor": "green"
}]