javascript - ASP.NET MVC - 将包含数组的 FormData 映射到模型类

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

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

更新我仍在尝试解决此问题,非常感谢您的帮助! 更新2 为了清楚起见,我使用 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");

服务器端( Controller )

    [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; } 
    }

最佳答案

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

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) {
            }
     });

关于javascript - ASP.NET MVC - 将包含数组的 FormData 映射到模型类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56548246/

相关文章:

asp.net - 为什么.tfignore文件不忽略我的packages文件夹

c# - 存储 html css javascript 的最佳数据类型

javascript - 替换字符和单词

javascript - 如何正确使用Vue插件? <插件名称> 未定义

javascript - 打开图层。新功能不选(多层)

C# HttpWebRequest POST 数据 block

javascript - 将城市名称从 php 传递到 js(第 2 部分)

c# - System.Net.UnsafeNclNativeMethods.OSSOCK.recv 网络服务异常

c# - Unity C# 可滚动 GUI.BOX 不适用于 android

c# - GridView 行中的动态复选框在 ASP.NET 中未正确显示