【问题标题】:ASP.NET MVC - Map FormData containing array to model classASP.NET MVC - 将包含数组的 FormData 映射到模型类
【发布时间】:2019-06-11 16:40:34
【问题描述】:

在我的前端,我目前正在创建一个 FormData 对象,该对象包含一个具有以下属性的数组:“productName”和“productQuantity”。我能够将 FormData 发送到我的服务器端。但是,我无法绑定任何值。如何正确地将 FormData 中的对象列表映射到控制器上的 ASP.NET MVC 模型类?以下是我当前的代码:

更新我仍在努力解决这个问题,非常感谢帮助! Update2 为了清楚起见,我使用 Vuejs 作为我的客户端框架

客户端

  const formData = new FormData();

  formData.append("Product[0].ProductName", "T-Shirt");
  formData.append("Product[0].Options.Quantity", "1");
  formData.append("Product[1].ProductName", "Shoe");
  formData.append("Product[1].Options.Quantity", "2");

服务器端(控制器)

    [HttpPost("verifyCart")]
    public async Task<IActionResult> verifyCart([FromForm] Product[] products)
    {
    }

服务器端(模型)

public class Product
    {
        public string ProductName { get; set; }
        public List<Option> Options { get; set; }        
    }


public class Options
    {
        public int Quantity { get; set; } 
    }

【问题讨论】:

    标签: javascript c# asp.net vue.js form-data


    【解决方案1】:

    我可以通过更改表单数据来使其工作:

    formData.append("Product[0].ProductName", "T-Shirt");
    formData.append("Product[0].Options.Quantity", "1");
    formData.append("Product[1].ProductName", "Shoe");
    formData.append("Product[1].Options.Quantity", "2");
    

    “产品”的复数形式

    formData.append("Products[0].ProductName", "T-Shirt");
    formData.append("Products[0].Options.Quantity", "1");
    formData.append("Products[1].ProductName", "Shoe");
    formData.append("Products[1].Options.Quantity", "2");
    

    因为您在发布操作中使用的参数是“产品”:

    [HttpPost]
    public IActionResult VerifyCart([FromForm] Product[] products)
    {
    }
    

    我用来测试的客户端代码是:

    const formData = new FormData();
    
        formData.append("Products[0].ProductName", "T-Shirt");
        formData.append("Products[0].Options.Quantity", "1");
        formData.append("Products[1].ProductName", "Shoe");
        formData.append("Products[1].Options.Quantity", "2");
    
        $.ajax({
                type: "POST",
                url: '/Home/VerifyCart',
                data: formData,
                processData: false,
                contentType: false,
                success: function (data) {
                }
         });
    
    

    更新

    我更改了客户端代码以解决数量问题:

    const formData = new FormData();
    
        formData.append("Products[0].ProductName", "T-Shirt");
        formData.append("Products[0].Options[0].Quantity", "1");
        formData.append("Products[1].ProductName", "Shoe");
        formData.append("Products[1].Options[0].Quantity", "2");
    
        $.ajax({
                type: "POST",
                url: '/Home/VerifyCart',
                data: formData,
                processData: false,
                contentType: false,
                success: function (data) {
                }
         });
    

    【讨论】:

    • 嗨@tiennsloit,感谢您的回复!我能够收到产品名称,但没有收到产品数量。为什么这样?是不是因为数量位于另一个类?
    • 我认为我们还需要解决这个问题:formData.append("Products[0].Options[0].Quantity", "1") 和 formData.append("Products[1].选项[0].Quantity", "2")
    • 嗨@Issaki,我已经测试并更新了帖子以解决数量问题。原因是因为Options也是listing类型
    猜你喜欢
    • 1970-01-01
    • 2013-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-17
    相关资源
    最近更新 更多