我从向导Asp Mvc 5解决方案创建了Odata服务到EF 6。 我想发送post请求并在数据库中创建一条记录 但是odata控制器运行了请求,但没有将JSON映射到EF对象 我的ajax请求有什么问题?
Odata方法:
// POST: odata/SchoolChildrens
public async Task<IHttpActionResult> Post(SchoolChildrens schoolChildrens)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
db.SchoolChildrensSet.Add(schoolChildrens);
await db.SaveChangesAsync();
return Created(schoolChildrens);
}
JavaScript对象Side(这里不需要客户端的所有DB属性):
var children = function () {
var self = this;
self.Id = ko.observable(0);
self.FullName = ko.observable();
self.IsPrivilege = ko.observable(false);
self.UseInShortMenu = ko.observable(false);
}
发送请求的部分代码,两种情况都不能初始化数据
self.addItem = function () {
var newStudent = ko.toJSON(self.newRow());
$.post("/odata/SchoolChildrens", JSON.stringify(newStudent), function (result) {
self.childrenList.push(result.value);
}).fail(function () { console.log("Function : Add SchoolChildrens error"); });
$.ajax({
type: "POST",
url: "/odata/SchoolChildrens",
data: newStudent,
success: function(result) {
self.childrenList.push(result.value);
},
dataType: 'json',
contentType: 'application/json'
});
};
我尝试发送JSON {schoolChildrens:ko.toJSON(self.newRow())}作为地图变量名称但它也失败了。 我应该如何正确地向odata控制器发送邮件请求?
答案 0 :(得分:1)
首先,检查您的请求是否确实包含任何数据(来自页面的请求对象包含非null或未定义的数据属性)
其次,当您使用可以在请求正文(POST, PUT, DELETE)
中发送数据的http方法时,有必要在对象之前添加[FromBody]
属性,因为您要将其映射为方法参数