【问题标题】:Ajax data not reaching backend C# codeAjax 数据未到达后端 C# 代码
【发布时间】:2016-09-22 08:18:41
【问题描述】:

下面是我试图发送的代码。如您所见,在 UI 上进行了 ajax 调用,并传递了数据“sub”。这个“子”中有一个对象数组。所以数据在传递时就存在。

用户界面

$scope.save = function () {
           var sanit = $scope.gridOptions.rowData;
           var sub = JSON.stringify(sanit);

           $.ajax({
               type: 'POST',
               url: '/api/Pr/PM',
               data: sub,     //this has data in it
               contentType: "application/json"
           }).success(function (response) {
               window.alert("Database updated successfully.");
           })
   };

但是,当我在后端调试代码时,参数显示为 null。我已经评论了显示 this is null 的部分,其中数据在后端函数开始时显示为 null。

后端 C# 端

[HttpPost]
    public HttpResponseMessage PM([FromBody] string parameters) //this is null.
    {
        string message = string.Empty;
        try
        {
            var model = JsonConvert.DeserializeObject<List<PODetails>>(parameters);
            message = "Insert Successfull";
            return Request.CreateResponse(HttpStatusCode.OK, message);
        }
        catch (Exception ex)
        {
            message = "Insert fail";
            return Request.CreateErrorResponse(HttpStatusCode.NoContent, message);
        }
    }

有人可以告诉我为什么它在后端显示为空值。

【问题讨论】:

  • 尝试将名称“parameters”更改为“sub”,使其与您从 AJAX 传递的名称匹配
  • 你提到 sub 是一个对象数组,你 post 方法有一个字符串参数,所以你必须发送这样的东西:{ parameters: "data" }

标签: javascript c# ajax


【解决方案1】:

您需要确保通过 AJAX 发送的数据是具有单个参数的对象,该参数的名称应与您的后端期望的参数完全相同。

在这种情况下:

$.ajax({
  type: 'POST',
  url: '/api',
  data: JSON.stringify({ parameters: sub }),
  contentType: "application/json"
}).success(function (response) {
  ...
})

接下来,如果变量“sub”是一个对象数组,那么您必须创建一个类模型服务器端来匹配正在发送的数据的结构。然后,您的 API 接口应该期待一个新创建的类的列表。

例如:

[HttpPost]
public HttpResponseMessage PM(List<YourClassModel> parameters)
{
  ...
}

您的 API 现在应该能够接收和读取通过上述 AJAX 调用发送的数据了。

【讨论】:

    【解决方案2】:

    看看这个:Post a json object to mvc controller with jquery and ajax

    您正在发送一个对象列表,但试图将其作为字符串接收。您应该将您的函数参数从 (String parameters) 更改为 (List parameters) 并根据上面的链接更改您的 ajax 请求。这可能会解决你的问题。 (ps:我自己无法尝试,这就是为什么我说可能:))

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-09
      • 2020-01-24
      • 1970-01-01
      • 2012-12-11
      • 2012-06-22
      • 1970-01-01
      • 2020-01-24
      • 2013-01-12
      相关资源
      最近更新 更多