在POST期间,Ajax调用数据没有传递到控制器



背景:我有一个jQuery Kendo数据网格,允许用户在其中执行批量更新功能。我正试图通过jQuery中的AJAX调用来调用我的控制器。我面临的问题是,我的模型永远不会传递给控制器方法。当我的断点到达Controller时,MyModel项的计数为0。尽管我可以在Fiddler的请求中看到我的模型,但它实际上从未到达控制器。当我通过Fiddler直接访问API时,即使我传入应用程序生成的同一模型,也不会出现这个问题。我错过了什么?我的AJAX请求有问题。

下面是我的控制器代码:

[HttpPost]
[Route("UpdateRequest")]
[ResponseType(typeof(List<MyModel>))]
public HttpResponseMessage UpdateRequest([FromBody] List<MyModel> items)
{
var p = new GridItemProcessor();
var r = p.UpdateRows(items);
return Request.CreateResponse(HttpStatusCode.OK, r);
}

下面是我的ajax调用代码:

$.ajax({
type: "POST", async: false, url: baseAPIURL + "MrrRequest/UpdateRequest",
timeout: 15000,
dataType: 'json',
cache: false,
data: {
items: JSON.stringify(options.data.models)
},
success: function (result) {
options.success(result);
return true;
},
complete: function (data) {
$("#myGrid").data("kendoGrid").dataSource.read();
},
error: function (jqXHR, textStatus, errorThrown) {
alert(textStatus);
options.error();
}
});

下面是我的json请求的样子

[
{
"RequestId": 40,
"beneClaimId": 32,
"claimId": "20211308068186",
"lineCnt": "1",
"medRecRequested": true,
"eobChk": true,
"clmChk": true,
"dateReceived": null,
"MedRecRcvd": {
"MedRecRcvdId": "I",
"MedRecRcvdName": "Incomplete"
}
}
]

下面是MyModel的样子

public class MyModel
{
public int RequestId { get; set; }
public int beneClaimId { get; set; }
public string claimId { get; set; }
public string lineCnt { get; set; }
public bool? medRecRequested { get; set; }
public bool? eobChk { get; set; }
public bool? clmChk { get; set; }
public string dateReceived { get; set; }
public ViewModel.MedRecRcvd MedRecRcvd { get; set; } = new MedRecRcvd();
}
public class MedRecRcvd
{
public string MedRecRcvdId { get; set; }
public string MedRecRcvdName { get; set; }
}

您的控制器需要MyModel的集合。因此,您需要发布一系列项目。通过使用字符串,您发布的是单个字符串。作为测试,如果您将控制器更改为接受"字符串项",则应该在控制器中获得一个值。

假设你的options.data.models是一个数组,你会发布:

items: options.data.models

该数组中每个项的属性都需要与服务器上MyModel上的属性相匹配。如果是这样的话,你公布的数据应该在控制器中显示出来。

最新更新