Ajax数据没有到达后端C#代码

时间:2016-05-24 22:41:57

标签: javascript c# ajax

以下是我尝试发送的代码。如您所见,在UI上调用ajax,并传递数据“sub”。这个'sub'中有一个对象数组。因此传递数据时会出现数据。

UI SIDE

$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。我已经评论了显示此为null的部分,其中数据在后端函数的开头显示为null。

BACKEND C#SIDE

[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);
        }
    }

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

2 个答案:

答案 0 :(得分:2)

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

在这种情况下:

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

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

例如:

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

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

答案 1 :(得分:1)

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

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