我正在使用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
}
}
}
然而无论我做什么,该项目总是空的。我尝试过以下方法:
我使用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"
答案 0 :(得分:0)
我遇到了这个问题并且很痛苦!
这就是最终为我工作的原因。 第一部分是我的javascript(我想这就是你如何制作你的JSON)
" List"是我的数组完美匹配(即使对于这种情况,这很重要)我的C#模型。
Javascript构建列表
var List = [];
$.each(_questions, function () {
var limitID = this.id.substr(-1);
var Quest = $('#Quest_' + ID).val();
var objectpush = {
LimitID: limitID,
Quest: Quest,
ID: ID
}
List.push(objectpush);
然后在进一步的AJAX调用中我指定数据如下:
data: JSON.stringify(List),
最后这是在我的C#API上
public JsonResult QueryLimits(int UserID, [FromBody] List<List> List)
希望这有助于你轨道。不要复制代码,因为我在整个代码中将名称更改为List,这将导致问题!
Caz
答案 1 :(得分:0)
FromBody
属性,因为默认情况下会从请求正文构建非简单类型。
到目前为止,我没有看到您的代码有任何问题,它应该适用于有效请求。似乎问题是发送的请求,它导致模型绑定错误。要继续分析,请检查以下内容:
ActionContext.ModelState.IsValid
方法中Put()
的值。是真还是假?false
,请在调试器中检查集合ActionContext.ModelState.Values
。它应该包含模型绑定错误,它会暗示你实际发生的问题。