#javascript #c# #asp.net-core #fullcalendar #fullcalendar-3
#javascript #c# #asp.net-core #полный календарь #полный календарь-3
Вопрос:
Мы используем полный календарь с .net core- ef core. Мы получаем все данные о событиях, передавая их в fullcalendar.Это означает много событий.Затем он создает календарь событий с этими данными по умолчанию на этот месяц. Чего я хочу, так это сделать его ленивым. При получении данных он возвращает только события, дающие месяц.
в c#
public JsonResult GetEvents(E_Model model){
var list = _Service.GetEvents().ToList();
}
в файле вызова js ajax
function GetEvents() {
var events = [];
$.ajax({
type: "POST",
url: "/calHome/GetEvents",
data: { model: data },
success: function (data) {
calender.style.display = 'block';
$.each(data, function (i, v) {
events.push({
id: v.id,
title: v.name,
description: v.description,
//i got start and end moment
start: moment(v.start),
end: v.end != null ? moment(v.end) : null,});
})
GenerateCalender(events);
}
Создать календарь
function GenerateCalender(events) {
$('#calender').fullCalendar('destroy');
$('#calender').fullCalendar({
contentHeight: 800,
firstDay: 1,
defaultDate: new Date(),
timeFormat: 'HH:mm',
eventLimit: true,
events: events,
}
ajax getEvents вызывает getEvents в контроллере, он возвращает json, затем getEvents в ajax вызывает genaretecalendar. При вызове метода getEvents в aja.
Я хочу сделать это, когда я нажимаю предыдущую или следующую кнопку, она передает месяц контроллеру и получает данные по месяцам. Я попытался прослушать предыдущее событие, например
$('.fc-prev-button').one('click',function (e) {
console.log('prev, do something');
});
НОВОЕ
events: {
type: "POST",
url: "/home/GetEvents",
data: function () { // a function that returns an object
return {
};
}
Контроллер
[HttpPost]
public JsonResult GetEvents(FiltModel model)
//model includes string start, end
Комментарии:
1. Также как я могу прослушать, когда нажата предыдущая или следующая кнопка
2. есть ли у вас какие-либо предложения @ADyson
3. Мастер, не расстраивайтесь, сарказм иногда не так уж и плох, и мне понравилось с вами разговаривать, спасибо вам за это и за ваши труды. Я собираюсь это сделать
4. Да, наконец-то сделал это с вашей помощью, большое вам спасибо. Хорошего дня, мастер
5. Можете ли вы заставить его ответить, и я его приму?
Ответ №1:
Лучший способ добиться этого — использовать события как шаблон подачи JSON, описанный в документации FullCalendar .
По сути, это работает следующим образом: если вы укажете FullCalendar URL-адрес вашего действия контроллера, он автоматически отправит новый запрос на сервер всякий раз, когда диапазон дат изменяется в календаре (и у него еще нет загруженных событий для этого диапазона дат). Он также автоматически добавит к запросу параметры даты «начало» и «конец», поэтому все, что нужно сделать вашему серверу, это прочитать эти параметры и использовать их в вашем запросе к базе данных для фильтрации результатов, возвращаемых в календарь. Вы также можете, при необходимости, добавить другие соответствующие данные к запросу, например, другие параметры фильтра.
Итак, в вашем случае вы получите код примерно такого типа:
Конфигурация событий JavaScript — полного календаря:
events: {
type: "POST",
url: "/home/GetEvents",
data: function () { // a function that returns an object
return {
//your filter object goes here
};
}
Контроллер:
[HttpPost]
public JsonResult GetEvents(FiltModel model) {
//...where the FiltModel class includes start and end parameters - ideally these should be DateTime objects, not strings.
//... then, query the database using the filter options in the model, and return JSON in the format required by fullCalendar
}