将JSON对象发送到Web API

我试图找出如何将表单中的一些信息发送到Web API操作。 这是我试图使用的jQuery / AJAX:

var source = { 'ID': 0, 'ProductID': $('#ID').val(), 'PartNumber': $('#part-number').val(), 'VendorID': $('#Vendors').val() } $.ajax({ type: "POST", dataType: "json", url: "/api/PartSourceAPI/", data: JSON.stringify({ model: source }), success: function (data) { alert('success'); }, error: function (error) { jsonValue = jQuery.parseJSON(error.responseText); jError('An error has occurred while saving the new part source: ' + jsonValue, { TimeShown: 3000 }); } }); 

这是我的模特

 public class PartSourceModel { public int ID { get; set; } public int ProductID { get; set; } public int VendorID { get; set; } public string PartNumber { get; set; } } 

这是我的看法

 
@foreach (SmallHorse.ProductSource source in Model.Sources) { @source.ItemNumber
}

这是我的控制器动作

 // POST api/partsourceapi public void Post(PartSourceModel model) { // currently no values are being passed into model param } 

我错过了什么? 现在,当我调试并在ajax请求命中控制器操作时逐步执行此操作时,没有任何内容传递给模型参数。

试试这个:

jQuery的

  $('#save-source').click(function (e) { e.preventDefault(); var source = { 'ID': 0, //'ProductID': $('#ID').val(), 'PartNumber': $('#part-number').val(), //'VendorID': $('#Vendors').val() } $.ajax({ type: "POST", dataType: "json", url: "/api/PartSourceAPI", data: source, success: function (data) { alert(data); }, error: function (error) { jsonValue = jQuery.parseJSON(error.responseText); //jError('An error has occurred while saving the new part source: ' + jsonValue, { TimeShown: 3000 }); } }); }); 

调节器

  public string Post(PartSourceModel model) { return model.PartNumber; } 

视图

    

现在,当您在填写文本框后单击“ Add ”时, controller将在警报中吐出您在PartNumber框中编写的内容。

更改:

  data: JSON.stringify({ model: source }) 

至:

  data: {model: JSON.stringify(source)} 

在你的控制器中你这样做:

 public void PartSourceAPI(string model) { System.Web.Script.Serialization.JavaScriptSerializer js = new System.Web.Script.Serialization.JavaScriptSerializer(); var result = js.Deserialize(model); } 

如果你在jquery中使用的url是/api/PartSourceAPI那么控制器名称必须是api ,action(方法)应该是PartSourceAPI

 var model = JSON.stringify({ 'ID': 0, 'ProductID': $('#ID').val(), 'PartNumber': $('#part-number').val(), 'VendorID': $('#Vendors').val() }) $.ajax({ type: "POST", dataType: "json", contentType: "application/json", url: "/api/PartSourceAPI/", data: model, success: function (data) { alert('success'); }, error: function (error) { jsonValue = jQuery.parseJSON(error.responseText); jError('An error has occurred while saving the new part source: ' + jsonValue, { TimeShown: 3000 }); } }); var model = JSON.stringify({ 'ID': 0, ...': 5, 'PartNumber': 6, 'VendorID': 7 }) // output is "{"ID":0,"ProductID":5,"PartNumber":6,"VendorID":7}" 

您的数据类似于“{”model“:”ID“:0,”ProductID“:6,”PartNumber“:7,”VendorID“:8}}”web api控制器无法将其绑定到您的模型

我相信你需要在model周围引用:

 JSON.stringify({ "model": source })