【问题标题】:Ajax post method returns undefined in .net mvcAjax post方法在.net mvc中返回未定义
【发布时间】:2019-08-24 23:47:48
【问题描述】:

我的代码中有这个返回未定义的 ajax post 方法。我认为这是因为我没有传递任何数据,任何帮助将不胜感激。

我尝试使用@Url.Action Helper 传递url 字符串,并在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 } };
    }

【问题讨论】:

    标签: ajax asp.net-mvc post


    【解决方案1】:

    尝试将 contentType:'Application/json', 添加到您的 ajax 中,然后只需:

    return Json(status);

    在您的控制器中,而不是 JsonResult。除此之外,您还需要将 ajax 代码中的数据作为字符串化的 Json 传递,例如:

    data:JSON.stringify(data),

    另外,有没有特别的理由为什么它是JsonResult 方法?

    【讨论】:

      【解决方案2】:

      在调用 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 );
                      }
                  })
              }
      

      【讨论】:

      • 你能给我示范一下正确的语法吗
      • 我已经发布了ajax调用的代码以及请求数据,您可以使用上面的代码来执行操作。
      • 我按照您的建议进行了更改,但我仍然遇到同样的问题。我收到 404 错误
      • 请确保您在 ajax 调用中具有正确的控制器和操作方法名称。
      • 我已经确定控制器和动作方法名称是正确的,请问我从表单中调用数据的方式有问题吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-03
      • 2015-11-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多