【问题标题】:What is the best and most efficient way to get data by JavaScript from EntityFramework database in my case?在我的情况下,通过 JavaScript 从 EntityFramework 数据库获取数据的最佳和最有效的方法是什么?
【发布时间】:2019-02-28 20:07:05
【问题描述】:

现在在我的 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; }
    }

通过 MVC Razor ViewsEF database 获取数据没有问题。但是我在我的一个视图中使用了JavaScript 日历插件,它将标记来自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 文件中我可以使用loadEventsFromServer() 函数的kinf,它使用XMLHttpRequestFetch 并解析它(我还不知道如何进行解析,我很乐意得到一些建议),

就是这样。你还有其他的想法吗?

编辑

更新部分插件代码,控制台错误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);
            }

【问题讨论】:

    标签: javascript c# entity-framework asp.net-core-mvc


    【解决方案1】:

    我会建议你使用 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);
        }
    

    【讨论】:

    • 很酷的方法,但我收到控制台错误d is undefined,我猜它是来自日历插件的d。我用部分插件代码更新了问题。
    • P.S.在您的代码中返回事件之前编写console.log(event);console.log(start); 之后,我的控制台中根本没有任何信息。
    • Temporay 我设法使它与使用 MVC 组件并在其中混合使用 JSRazor 代码:events: [ @foreach (var item in Model) { &lt;text&gt; { title: '@item.Title', description: '@item.Description', datetime: new Date('@item.WhenHappens.Year', @item.WhenHappens.Month-1, '@item.WhenHappens.Day', '@item.WhenHappens.Hour')}, &lt;/text&gt; } ] 我想知道如何使用普通的 JS 使其工作
    • 尝试在ajax成功中设置调试器,并在成功函数的数据中找到你得到的内容。
    • 只需将debugger 放在var events 之前,然后在数据中找到你得到的数据,这些数据对你得到的数据是有意义的,你需要处理它..
    猜你喜欢
    • 1970-01-01
    • 2016-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-20
    • 1970-01-01
    • 1970-01-01
    • 2017-12-11
    相关资源
    最近更新 更多