2015-11-03 34 views
1

我已经使用Odata服务向导EF 6创建了向导Asp Mvc 5解决方案。 我想发送发布请求并在数据库 中创建记录,但是odata控制器运行请求但未将JSON映射到EF对象 我的ajax请求有什么问题?Asp Mvc 5发布Odata永不初始化数据

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对象侧(不是所有的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())}在地图变量名BU它也失败了。 我应该如何正确发送邮寄请求到odata控制器?

回答

1

首先,检查你的要求的确不包含任何数据(从页请求对象包含不为空或未定义的数据属性)

其次,当您使用的HTTP方法,可以在请求体(POST, PUT, DELETE)发送数据时,有必要到对象之前添加[FromBody]属性,你希望映射为方法参数

+0

FromBody似乎对OData的 –

+0

不要紧lkie dos't工作采取什么行动的方法执行 - 'FromBody'属性解析请求体数据方法的参数对象 – Andrew