Asp Mvc 5 Post to Odata永远不会初始化数据

时间:2015-11-03 14:03:50

标签: c# json asp.net-mvc entity-framework odata

我从向导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控制器发送邮件请求?

1 个答案:

答案 0 :(得分:1)

首先,检查您的请求是否确实包含任何数据(来自页面的请求对象包含非null或未定义的数据属性)

其次,当您使用可以在请求正文(POST, PUT, DELETE)中发送数据的http方法时,有必要在对象之前添加[FromBody]属性,因为您要将其映射为方法参数