以下是我尝试发送的代码。如您所见,在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);
}
}
有人可以告诉我为什么它在后端显示为空值。
答案 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:我自己也不能尝试这就是为什么我说的可能:))