Каков наилучший и наиболее эффективный способ получения данных с помощью JavaScript из базы данных EntityFramework в моем случае? - PullRequest
0 голосов
/ 25 сентября 2018

Прямо сейчас в моем проекте ASP.NET MVC Core2 у меня есть модель в EF database, которая содержит несколько свойств:

public class SchoolEvents
    {
        public long ID { get; set; }
        [Required]
        [StringLength(40, ErrorMessage = "Max 40 characters")]
        public string Title { get; set; }
        [Required]
        public string Description { get; set; }
        [Required]
        public DateTime WhenHappens { get; set; }
    }

У меня нет проблем с получением данных из EF database по MVCRazor Views.Но я использую плагин JavaScript Calendar в одном из моих просмотров, который будет отмечать события с db на нем.Для этого сценарий получает данные в формате:

{ title: 'EventTitle', description: 'Few words about the event', datetime: new Date(2018, 8, 14, 16) }

Кажется очевидным, что я предполагал использовать в сценарии цикл for, повторяющийся на объектах db.

Поскольку я все еще не могу понять, что такое JS, сейчас я знаю, как это сделать:

- для создания файла JSON в контроллере:

[Route("events")]
        [ResponseCache(Location = ResponseCacheLocation.None, NoStore = true)]
        public ActionResult Comments()
        {
            var _events= _context.Events.OrderBy(c => c.ProductID).ToList(); //yes, I know, I should use repository in the best practice
            return Json(_events);
        }

JS файле я могу использовать функцию kinf loadEventsFromServer(), которая использует XMLHttpRequest или Fetch и анализирует ее (я пока не знаю, как выполнить анализ, я буду рад получить некоторые предложения),

И это оно.У вас есть другие идеи, как это сделать?

РЕДАКТИРОВАТЬ :

Обновление с частью кода плагинов, для ошибки консоли d is undefined:

for (var i = 0; i < 42; i++) {
                var cDay = $('<div/>');
                if (i < dWeekDayOfMonthStart) {
                    cDay.addClass('c-day-previous-month c-pad-top');
                    cDay.html(dLastDayOfPreviousMonth++);
                } else if (day <= dLastDayOfMonth) {
                    cDay.addClass('c-day c-pad-top');
                    if (day == dDay && adMonth == dMonth && adYear == dYear) {
                        cDay.addClass('c-today');
                    }
                    for (var j = 0; j < settings.events.length; j++) {
                        var d = settings.events[j].datetime;
                        if (d.getDate() == day && d.getMonth() == dMonth && d.getFullYear() == dYear) {
                            cDay.addClass('c-event').attr('data-event-day', d.getDate());
                            cDay.on('mouseover', mouseOverEvent).on('mouseleave', mouseLeaveEvent);
                        }
                    }
                    cDay.html(day++);
                } else {
                    cDay.addClass('c-day-next-month c-pad-top');
                    cDay.html(dayOfNextMonth++);
                }
                cBody.append(cDay);
            }

1 Ответ

0 голосов
/ 25 сентября 2018

Я предлагаю вам использовать ajax-запрос.

Javascript: Ajax

        $.ajax({
            type: 'POST',
            url: '@URL.Action("Comments","Controller")',
            contentType: 'application/json;charset=utf-8',
            dataType: 'json',
            data: {},
            success: function (data) {
             var events = new Object();
                events = $.map(data.d, function (item, i) {
                    for (var j = 0; j < data.d.length; j++) {
                        var event = new Object();                            
                        var startDate = Date.parse(item.WhenHappens )
                        event.start = startDate;                           
                        event.title = item.Title;
                        event.backgroundColor = "#c6458c";
                        event.description = item.Description;
                        return event;
                    }
                })
                callCalender(events);
            },
            error:function(e){  

            }
        });

Контроллер

[Route("events")]
    [HttpPost]
    [ResponseCache(Location = ResponseCacheLocation.None, NoStore = true)]
    public ActionResult Comments()
    {
        var _events= _context.Events.OrderBy(c => c.ProductID).ToList(); //yes, I know, I should use repository in the best practice
        return Json(_events);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...