javascript - 将两个 View 模型传递给操作

标签 javascript c# jquery asp.net-mvc

我处理电子商务的购物车。我有两个 View 模型。

首先是客户信息:

public class CartViewModel
    {
      public string FirstName{get;set;}
      public string Email{get;set;}
      //... other fields
}

第二个是客户购物车:

 public class ProductsCart
    {
        public Guid Id { get; set; }
        public decimal Price { get; set; }
        public int ItemsOrdered { get; set; }
     }

主要是购物车存储在用户 localStorage 中,我应该通过 jquery 将其与客户信息一起从 localStorage 传递到 MVC 的操作:

[HttpPost]
public ActionResult ConfirmOrder(CartViewModel model, IEnumerable<ProductsCart> cart)
    {
        // validate and save to database 
    }

我有 javascript 方法将数据发送到我的操作:

function ConfirmOrder() {
    var serverCart = LocalCartToSercerCart(); //see first screnshot 
    var customerData = $("#FORM_WITH_CUSTOMERS_VIEW_MODEL").serialize();   

    $.ajax({
        method: "POST",
        url: "/Cart/ConfirmOrder",
        data: {model: customerData, cart: serverCart  }
    })
    .done(function () {
      //do something
    });

}

但我的 CartViewModel 总是得到空值(屏幕截图 2)

我还附加了包含我的调试信息的文件。

如果我这样写 javascript 函数:

function ConfirmOrder() {    
  var customerData = $("#cartForm").serialize();

$.ajax({
   method: "POST",
   url: "/Cart/ConfirmOrder",
   data: customerData
  })
 .done(function () {   
   //some code
    });    
}

我只得到模型数据(见截图3)

enter image description here

enter image description here

enter image description here

编辑: 我使用 Igor 的答案编写了代码,但在操作参数中仍然得到 null enter image description here

最佳答案

您收到空值的原因是数据在发送到服务器之前未转换为 JSON。 JQUERY ajax 调用不会自动为您执行此操作。您可以像这样使用 JSON.stringify 轻松转换它。

$.ajax({
    method: "POST",
    url: "/Cart/ConfirmOrder",
    data: JSON.stringify({model: customerData, cart: serverCart }),
    contentType: 'json' // added to tell the server the format of the data being sent
})
.done(function () {
  //do something
});

JSON.stringify将您的对象转换为格式正确的 JSON,然后将其发送到服务器。来自documentation .

The JSON.stringify() method converts a JavaScript value to a JSON string, optionally replacing values if a replacer function is specified, or optionally including only the specified properties if a replacer array is specified.

注意 此编辑基于下面的@StephenMuecke 评论。我之前的回答不正确,唯一需要更改的是您的 javascript ajax 调用,而不是您的 C# 代码。

关于javascript - 将两个 View 模型传递给操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37184922/

相关文章:

javascript - 如何在字体大小更改时停止输入调整大小

c# - 不使用 ref 关键字替换参数的 ref(使用 IL)

c# - UpdatePanel 和 RegisterStartupScript 之间有冲突吗?

javascript - Ajax卡在beforeSend阶段,不向PHP发送数据

javascript - 如何使用 jQuery 访问输入字段文本?

javascript - 所有数据点未显示在堆积条形图中

javascript - 如何使用 jquery 更改第二个和第六个 DIV 的 css 属性

javascript - 数据表无法读取未定义的属性 'fnGetData'

jquery - 在文本区域中光标位置后插入文本

c# - 使用 Moq 调用方法时如何验证上下文条件