полный календарь .net core получает данные, указывая месяц

#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
}