【问题标题】:How to get the data that was being sent from controller to json?如何获取从控制器发送到 json 的数据?
【发布时间】:2020-12-15 10:47:46
【问题描述】:

我正在尝试将此完整日历代码从使用实体框架转换为使用 Sql 命令。

这是原始代码:

1.JS代码

        var events = [];
        var selectedEvent = null;
        FetchEventAndRenderCalendar();
        function FetchEventAndRenderCalendar() {
            events = [];
            $.ajax({
                type: "GET",
                url: "/home/GetEvents",
                success: function (data) {
                    $.each(data, function (i, v) {
                        events.push({
                            eventID: v.EventID,
                            title: v.Subject,
                            description: v.Description,
                            start: moment(v.Start),
                            end: v.End != null ? moment(v.End) : null,
                            color: v.ThemeColor,
                            allDay: v.IsFullDay
                        });
                    })

2.ASP.Net 代码(来自 HomeController)

    public JsonResult GetEvents()
    {
        using (MyDatabaseEntities dc = new MyDatabaseEntities())
        {
            var events = dc.Events.ToList();
            return new JsonResult { Data = events, JsonRequestBehavior = JsonRequestBehavior.AllowGet};
        }
    }

这是MY CONVERTED代码:

1.JS代码

    var events = [];
    var selectedEvent = null;
    FetchEventAndRenderCalendar();
    function FetchEventAndRenderCalendar() {
        events = [];
        $.ajax({
            type: "GET",
            url: "/Dashboard/GetEvents",
            success: function (Data) {
                $.each(Data, function (i, v) {
                        events.push({
                        eventID: v.EventID,
                        title: v.Subject,
                        description: v.Description,
                        start: moment(v.Start, ["YYYY-MM-DD HH:MM:SS"]),
                        end: v.End != null ? moment(v.End, ["YYYY-MM-DD HH:MM:SS"]) : null,
                        color: v.ThemeColor,
                        allDay: v.IsFullDay
                    });
                });
                GenerateCalender(events);
            },
            error: function (error) {
                console.log("It Failed");

            }
        })
    }

2.ASP.Net 代码(来自 DashboardController)

    public JsonResult GetEvents()
    {
        
        DataTable dtblSchedules = new DataTable("Schedule");
        using (SqlConnection sqlCon = new SqlConnection(connectionString))
        {
            sqlCon.Open();
            SqlDataAdapter sqlDa = new SqlDataAdapter("SELECT * FROM Schedule", sqlCon);
            sqlDa.Fill(dtblSchedules);
            List<Schedules> scheduleList = new List<Schedules>();
            for (int i = 0; i < dtblSchedules.Rows.Count; i++)
            {
                Schedules schedulesModel = new Schedules();
                schedulesModel.EventID = Convert.ToInt32(dtblSchedules.Rows[i]["ScheduleId"]);
                schedulesModel.Subject = dtblSchedules.Rows[i]["Subject"].ToString();
                schedulesModel.Description = dtblSchedules.Rows[i]["Description"].ToString();
                schedulesModel.Start = dtblSchedules.Rows[i]["Start_time"].ToString();
                schedulesModel.End = dtblSchedules.Rows[i]["End_time"].ToString();
                schedulesModel.ThemeColor = dtblSchedules.Rows[i]["Theme"].ToString();
                schedulesModel.IsFullday = dtblSchedules.Rows[i]["Full_day"].ToString();
                scheduleList.Add(schedulesModel);
            }
            return new JsonResult { Data = scheduleList, JsonRequestBehavior = JsonRequestBehavior.AllowGet};
        }
    }

所以我要做的是将使用从数据库实体更改为 SQL 命令,因为我想使用我的 SQL 服务器中的数据库。我保持原始代码的工作方式,因为返回的数据在 list 但我没有收到视图的 JS CODE 中的任何数据,但收到了 jsonrequestbehavior

最后,日历显示,但没有显示任何事件,即使我的数据库中有数据。我尝试通过填写事件 ID、标题等来使用虚拟数据,它显示在我的日历上.所以问题是如何将数据从我的数据库中获取到 JS 事件?请帮帮我!

这是我使用虚拟数据时的结果: The events are shown on the calendar

显示了 2 个事件,我认为这是因为我的数据库 rn 中有 2 个数据。

【问题讨论】:

    标签: jquery sql-server asp.net-mvc entity-framework dom-events


    【解决方案1】:

    您可以在 web config 中设置 JSON maxJsonLength。

    <configuration> 
       <system.web.extensions>
           <scripting>
               <webServices>
                   <jsonSerialization maxJsonLength="50000000"/>
               </webServices>
           </scripting>
       </system.web.extensions>
    </configuration> 
    

    https://forums.asp.net/t/1962449.aspx?JSON+Maximum+length+problem+with+ASP+NET

    【讨论】:

    • 这个我试过了,还是不行。
    • 查看 Data.Data.v.EventID ,Data.Data.v.Subject。检查“数据”
    • 试试 $.each(Data.Data, function (i, v)
    • 1.原始数据和转换后的数据都是参数:any。 2.我尝试了下一条评论,也失败了。
    【解决方案2】:

    感谢那些为回答这个问题做出贡献的人。我已经找到了一种方法来使用我对 ASP.NET MVC 和 Javascript 的一点了解来转换代码。

    我就是这样解决的:

    使用我创建的模型,我改变了从数据库获取数据的方式。下面是我现在用来从数据库中获取数据的代码:

    var Calendar = FullCalendar.Calendar;
    var calendarEl = document.getElementById('calendar');
    
    var events = [];
    var selectedEvent = null;
    FetchEventAndRenderCalendar();
    function FetchEventAndRenderCalendar() {
    
       @for(int i = 0; i < Model.Rows.Count; i++) {
           @: events.push({ eventID: @Model.Rows[i][0], title: "@Model.Rows[i][1]", description:"@Model.Rows[i][2]" , start: "@Convert.ToDateTime(Model.Rows[i][3]).ToString("yyyy-MM-dd HH:mm:ss.fff")", end:"@Convert.ToDateTime(Model.Rows[i][4]).ToString("yyyy-MM-dd HH:mm:ss.fff")", color: "@Model.Rows[i][5]", allDay: "@Model.Rows[i][6]", });
       }
       GenerateCalender(events);
    }
    

    我使用与视图一起发回的数据表作为获取数组数据的方式。

    【讨论】:

      猜你喜欢
      • 2018-11-26
      • 1970-01-01
      • 2020-10-08
      • 1970-01-01
      • 2018-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-02
      相关资源
      最近更新 更多