我正在尝试使用ajax发布将代表模型的javascript对象发布回控制器。但是,该模型始终显示为空。
有问题的模型如下
public class Product
{
[Key]
public int Id { get; set; }
[Required(ErrorMessage = "Name is required and must not be empty.")]
[StringLength(200, ErrorMessage = "Name should not exceed 200 characters.")]
public string Name { get; set; }
public DateTime Created { get; set; }
[Required(ErrorMessage = "Price is required and must not be empty.")]
[DataType(DataType.Currency)]
public decimal Price { get; set; }
}
ajax调用看起来像这样
$('#btnSaveNewProduct').click(function (e) {
e.preventDefault();
var form = $('#frmNewProduct');
if (form.valid()) {
var data = { // to be replaced with form values
Name: 'Bob',
Price: 34
};
//ajax call to save product
$.ajax({
type: "POST",
url: "@Url.Action("AddProduct", "Admin")",
contentType: "application/json",
dataType: "json",
data: data,
success: function (response) {
alert('done');
},
error: function (response) {
alert(response);
}
});
}
});
控制器方法如下所示
[HttpPost]
public JsonResult AddProduct([FromBody] Product product)
{
bool success = false;
// save product
success = true;
return new JsonResult(success);
}
任何见识都会受到赞赏。
答案 0 :(得分:0)
我发现以下工作方式
: $.ajax({
method: "POST",
data: { "Name": "bob", "Price": 10},
url: "@Url.Action("AddProduct", "Admin")",
success: function (data) {
//success login
},
error: function (data) {
alert('error' + data.status);
}
});
在ajax调用中无需提及dataType和contentType。您的控制器将如下所示:
[HttpPost]
public ActionResult AddProduct(Product product)
{
//You logic will be here
}
答案 1 :(得分:0)
要使您的代码正常工作,请对代码进行以下三处修改。
dataType: "json"
data:data
data:JSON.stringify(data)
注意事项:
使用[FromBody]
属性时,Content-Type
值确定ASP.NET Core MVC框架用于参数绑定的格式化程序。
由于您的Content-Type
是application/json
,因此应将原始JSON字符串而不是JSON对象作为数据传递。因此,请应用JSON.stringify
。