Ajax post метод возвращает неопределенное в .net mvc - PullRequest
0 голосов
/ 03 апреля 2019

В моем коде есть метод post ajax, который возвращает undefined. Я думаю, потому что я не передал никаких данных, любая помощь будет оценена.

Я попытался передать строку URL-адреса с помощью @ Url.Action Helper и передать данные в качестве параметра параметра успеха в методе ajax.

// jquery ajax post метод

function SaveEvent(data) {
                $.ajax({
                    type: "POST",
                    url: '@Url.Action("Bookings/SaveBooking")',
                    data: data,
                    success: function (data) {
                        if (data.status) {
                            //Refresh the calender
                            FetchEventAndRenderCalendar();
                            $('#myModalSave').modal('hide');
                        }
                    },
                    error: function (error) {
                        alert('Failed' + error.val );
                    }
                })
            }

// действие контроллера

    [HttpPost]
    public JsonResult SaveBooking(Booking b)
    {
        var status = false;
        using (ApplicationDbContext db = new ApplicationDbContext())
        {
            if (b.ID > 0) 
            {
                //update the event
                var v = db.Bookings.Where(a => a.ID == a.ID);
                if (v != null)
                {
                    v.SingleOrDefault().Subject = b.Subject;
                    v.SingleOrDefault().StartDate = b.StartDate;
                    v.SingleOrDefault().EndDate = b.EndDate;
                    v.SingleOrDefault().Description = b.Description;
                    v.SingleOrDefault().IsFullDay = b.IsFullDay;
                    v.SingleOrDefault().ThemeColor = b.ThemeColor;
                }
                else
                {
                    db.Bookings.Add(b);
                }
                db.SaveChanges();
                status = true;
            }
        }
        return new JsonResult { Data = new { status } };
    }

Ответы [ 2 ]

1 голос
/ 03 апреля 2019

Перед вызовом ajax вы должны собрать данные в объект, например,

  var requestData= {
    ModelField1: 'pass the value here',
     ModelField2: 'pass the value here')
  };

Обратите внимание, я добавил только два поля, но согласно объявлению вашего класса вы можете включить все свои поля.

должно быть как:

  function SaveEvent(data) {
            $.ajax({
                type: "POST",
                url: '@Url.Action(Bookings,SaveBooking)', 
                data: JSON.stringify(requestData),
                dataType: 'json',
                contentType: 'application/json; charset=utf-8',
                success: function (data) {
                    if (data.status) {
                        //Refresh the calender
                        FetchEventAndRenderCalendar();
                        $('#myModalSave').modal('hide');
                    }
                },
                error: function (error) {
                    alert('Failed' + error.val );
                }
            })
        }
1 голос
/ 03 апреля 2019

Попробуйте добавить contentType:'Application/json', к вашему ajax и просто наберите:

return Json(status);

В вашем контроллере вместо JsonResult. Кроме того, вам нужно будет передать данные в коде ajax в виде строкового Json, такого как:

data:JSON.stringify(data),

Кроме того, есть ли конкретная причина, в частности, почему это JsonResult метод?

...