Как получить данные, которые отправлялись с контроллера в json?

#jquery #sql-server #asp.net-mvc #entity-framework #dom-events

#jquery #sql-сервер #asp.net-mvc #entity-framework #dom-события

Вопрос:

Я пытаюсь преобразовать этот полнокалендарный код из использования entity framework в использование команд 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};
        }
    }
 

Это МОЙ ПРЕОБРАЗОВАННЫЙ код :

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 server.Я сохранил способ работы исходного кода в том смысле, что возвращаемые данные находятся в списке, но я не получил никаких данных в JS-КОДЕ представления, но jsonrequestbehavior они были получены.

В конце концов, отображается календарь, но не отображается событие, хотя в моей базе данных есть данные.Я попытался использовать фиктивные данные, заполнив EventID, title и т. Д., И Это отобразилось на моем calendar.So проблема в том, как мне получить данные из моей базы данных в события JS? Пожалуйста, помогите мне!

Это результат, когда я использовал фиктивные данные: события отображаются в календаре

было показано 2 события, я думаю, это потому, что есть 2 данные из моей базы данных rn.

Ответ №1:

Вы можете установить JSON maxJsonLengthin в веб-конфигурации.

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

https://forums.asp.net/t/1962449.aspx?JSON Максимальная длина проблема с ASP NET

Комментарии:

1. Я пробовал это, но это все еще не работает.

2. Посмотрите на Data.Data.v.EventID , Data.Data.v.Subject . Проверьте «Данные»

3. попробуйте $.each(Data.Data, function (i, v)

4. 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);
}
 

Я использовал datatable, который был отправлен обратно вместе с представлением, как способ получения данных для моего массива.