2017-10-20 72 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,它正在工作 –