2017-10-20 52 views
0

无法使用jQuery AJAX无法使用jQuery AJAX

这里张贴与列表asp.net核心API复杂的对象张贴在asp.net核心API复杂的对象是模型

public class Bus 
{  
    public int BusId { get; set; }     
    public string RegistrationNo { get; set; }   
    public IEnumerable<BusSeat> BusSeats { get; set; } 
} 

public class BusSeat : CoreModel 
{   

    public int DecNumber { get; set; } 
    public int SeatId { get; set; }   
} 

这里控制器

[HttpPost] 
public IActionResult Save([FromForm] Bus bus) 
{ 
    return Ok(bus); 
} 

这里是JavaScript

var d = { 
      BusId: 1, 
      RegistrationNo: 'REG123', 
      BusSeats: [ 
       { 
        DecNumber: 1, 
        SeatId:2, 
       }, 
       { 
        DecNumber: 1, 
        SeatId: 4, 
       } 
      ] 
     } 

$.ajax({ 
      type: 'post', 
      url: 'http://localhost:46060/api/bus/save', 
      contentType: 'application/json; charset=utf-8',     
      dataType: 'json', 
      data: JSON.stringify({ bus: d }),     
      success: function (data) {     
      }, 
      error: function (data) { 
      } 
     }); 

请求成功,但我无法获得任何数据。我错过了什么?

回答

0

更改从行动[FromBody],并在Ajax调用数据部分只是说

data: JSON.stringify(d) 

不是

data: JSON.stringify({ bus: d }) 
+0

没有,没有工作 –

+0

我改变了我的答案,并在当地项目中检查了它。一切都正确绑定。原因是AspNetCore模型绑定的工作原理。无论如何,它与传统的AspNet不同。 – Rob

0

你不需要stringifycontentType对阿贾克斯打电话,并且不需要在mvc动作上使用[FromForm]

只需将复杂对象直接传递给数据参数。

$.ajax({ 
    type: 'post', 
    url: 'http://localhost:46060/api/bus/save',     
    dataType: 'json', 
    data: d,     
    success: function (response) {     
    }, 
    error: function (response) { 
    } 
}); 

只要复杂的json对象与您定义的视图模型匹配,绑定应该“神奇地”起作用。

[HttpPost] 
public IActionResult Save(Bus bus) 
{ 
    return Ok(bus); 
} 

这是一个非主题,但你应该考虑如何构建你的uris,因为你正在构建web api。你不想在你的uri上继续使用旧的RPC风格。

认为控制器名称是资源集合,并使用HttpMethod作为动词。

所以我会创建BusesController而不是BusController,因为我考虑了资源收集,总线。

[Route("api/[controller]")] 
public class BusesController : Controller 
{ 
    // GET api/buses 
    [HttpGet] 
    public IActionResult() 
    { 
     // Return all buses 
     return OK(...); 
    } 

    // GET api/buses/1 
    [HttpGet] 
    public IActionResult(int id) 
    { 
     // Return individual bus 
     return OK(...); 
    } 

    // POST api/buses 
    [HttpPost] 
    public IActionResult Post(CreateBusViewModel model) 
    { 
     // Create a new bus and return newly created uri of the bus 
     return Created(...); 
    } 
} 

您可以在这里阅读更多关于Richardson Maturity Model

+0

感谢David,它正在工作 –