无法将 jquery ajax 中的多个数据参数传递给 razor OnPost

cannot pass multiple data parameters from jquery ajax to razor OnPost

我尝试使用“data:”以多种方式使用 ajax 传递多个参数 但并非所有参数都被传递。

这是 OnPost PageModel 方法:

public JsonResult OnPostCreate(Product product, int id, string name)
    {
        return new JsonResult(new { success = true });
    }

ajax:

function SaveMe() {
var product = {
    ProductId: 1,
    ProductName: 'Any',
    UnitsInStock: 2,
    Discontinued: true,
};

var id = 1;
var name = 'Product1';

var data = {};
data.product = product;
data.id = id;
data.name = name;

$.ajax({
    url: `?handler=Create`,
    method: "post",
    contentType: "application/json",
    headers: {
        "XSRF-TOKEN": $('input:hidden[name="__RequestVerificationToken"]').val()
    },
    data: JSON.stringify(data)
})
    .done(function (response) {
        alert(response.success);
    });

};

而且我不想使用“url:”ajax 中的参数,例如:

url: `?handler=Create&id=2&name=Product1`

有人可以帮忙吗? 谢谢大家。

也许这对你有帮助;

function SaveMe() {
  var product = {
      ProductId: 1,
      ProductName: 'Any',
      UnitsInStock: 2,
      Discontinued: true,
  };

  var id = 1;
  var name = 'Product1';
  
  product.id = id; // ----------------------- (*1)
  product.name = name; // ------------------- (*2)

$.ajax({
    url: `?handler=Create`,
    method: "post",
    contentType: "application/json",
    headers: {
        "XSRF-TOKEN": $('input:hidden[name="__RequestVerificationToken"]').val()
    },
    data: product  // ----------------------- (*3)
})
    .done(function (response) {
        alert(response.success);
    });
};

*1 : 在服务器端,您的产品模型没有“id”和“名称”属性 但是当您要一起使用它们时,您一起准备 client-side 模型。

*2 :也是另一种选择;将“id”和“name”属性 添加到具有 [NotMapped] 属性的产品模型。未映射的属性可以帮助您将额外的 属性 添加到数据库 table.

中未显示的模型中
 public class Product
 {
     public int ProductId { get; set; }
     public string ProductName { get; set; }
     public int UnitsInStock { get; set; }
     public bool Discontinued { get; set; }
     
     [NotMapped]
     public int id { get; set; }
     
     [NotMapped]
     public string name { get; set; }

 {

*3 :使用 JSON.stringify 不是必需的。 Post 数据作为 json.