【发布时间】:2018-05-06 22:53:24
【问题描述】:
我正在使用 JSGrid 来修改数据。我正在尝试按如下方式设置 updateItem:
updateItem: function (item) {
return $.ajax({
type: "PUT",
url: "/api/data/" + item.logID,
data: item,
contentType: "application/json;charset=utf-8",
dataType: "json"
});
}
我有一个模型如下:
public class LogEntry
{
public string firstName { get; set; }
public string lastName { get; set; }
public string comment { get; set; }
public bool modified { get; set; }
public DateTime inTime { get; set; }
public DateTime outTime { get; set; }
public double totalHrs { get; set; }
public int logID { get; set; }
}
这是我的 ApiController 类,其中包含 Put 方法:
public class DataController : ApiController
{
public void Put(int id, [FromBody]LogEntry item)
{
if(item != null)
{
//DO STUFF
}
}
}
但是,无论我做什么,该项目始终为 Null。我尝试了以下方法:
- 更改为 [FromBody]JObject 项
- 更改为 [FromBody]String 项
- 将 data: 字段更改为 Json.Stringify
- 将 [FromBody]String 改为 String
- 在 updateItem ajax 调用中添加和删除 application/json;charset=utf-8 的上下文类型。
我使用 Fiddler 查看发回的数据。它显示了正在发送的正确 JSON,但 Put 方法似乎没有获取该数据。
任何关于可能导致这种行为的想法都会很棒。我一直在研究,但还没有任何效果。
解决说明
事实证明,Caz1224 和 CodeFuller 的两个答案都有助于解决这个问题。 CodeFuller 查找错误消息的方式引导我将 JSON 返回到服务器。尽管 Fiddler 说它是正确的,但它还是搞砸了。我更改了我的 Ajax 调用以对项目进行字符串化。然后与我的模型完全匹配。
return $.ajax({
type: "PUT",
url: "/api/data/" + item.logID,
data: JSON.stringify(item),
contentType: "application/json; charset=utf-8",
dataType: "json"
【问题讨论】:
-
“项目”是如何构建的?它是一个正确的 JSON 字符串吗?
标签: c# json asp.net-mvc-5