【发布时间】:2021-11-07 02:03:02
【问题描述】:
背景:我有一个 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; }
}
【问题讨论】:
-
您发送了一个字符串列表
data: { items: JSON.stringify(options.data.models) },,但您的控制器需要一个对象列表。 -
我如何发送对象列表呢?起飞 JSON.stringify ? @ChristophLütjen
-
使用以下语法数据:JSON.stringify(options.data.models)
-
@RahulShukla 我试过了,但控制器中的项目计数仍然返回为 0
-
这应该适用于数据:'{items' + JSON.stringify(options.data.models) + '}', contentType: "application/json; charset=utf-8",跨度>
标签: c# jquery ajax kendo-ui kendo-grid