ASP.NET Core MVC使用Ajax将模型发布到控制器

时间:2018-10-17 22:17:27

标签: c# jquery ajax asp.net-core

我正在尝试使用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);
    }

任何见识都会受到赞赏。

2 个答案:

答案 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)

要使您的代码正常工作,请对代码进行以下三处修改。

  • 从Ajax调用中删除以下内容:dataType: "json"
  • 从Ajax调用中删除以下内容:data:data
  • 在Ajax调用中,添加以下内容:data:JSON.stringify(data)

注意事项:

  1. 使用[FromBody]属性时,Content-Type值确定ASP.NET Core MVC框架用于参数绑定的格式化程序。

  2. 由于您的Content-Typeapplication/json,因此应将原始JSON字符串而不是JSON对象作为数据传递。因此,请应用JSON.stringify

  3. 请参阅以下参考:Parameter Binding Using [FromBody] Attribute