asp.net NET MVC如何将绑定对象沿着发送给数组?

mgdq6dx1  于 5个月前  发布在  .NET
关注(0)|答案(1)|浏览(63)

我正在使用Entity Framework创建一个ASP.NET MVC项目
我有两个模型:

  • ModelA(字符串名称,ICollection列表)
  • ModelB(int days)

有没有什么方法可以将JSON数组(或者更好的是对象列表)连同绑定的属性一起沿着发送到控制器?
我试着把整个对象作为JSON发送,它工作了,但是我想知道ASP.NETMVC是否有一个工具可以更好地做到这一点。
chatGPT告诉我,我可以使用jQuery做到这一点:

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> CreateWithInstalment(
    [Bind("Name,Fee,Discount,Fine,Id")] PaymentCondition paymentCondition,
    [FromBody] List<InstalmentDTO> instalmentDTOList)
{
}

字符串
提交:

<input type="submit" 
       onclick="SendInstalmentArray();"
       value="Create" 
       class="btn btn-primary" />


阵法:

arrayInstalments.push({ Number, Days, Percentage, PaymentMethodId });


jQuery:

function SendInstalmentArray() {
  console.log("sending array...");
  if (ValidateObject()) {
    setPaymentCondition();
    $.ajax({
       contentType: 'application/json',
       dataType: 'json',
       type: 'POST',
       url: "/PaymentConditions/CreateWithInstalment",
       data: JSON.stringify(arrayInstalments),
       success: function () {
       console.log("array sent");
      },
      error: function () {
        console.log("error on sending array");
      }
   });
 }
}


我看到结果是错误415,我发送了2个请求,它不工作,但我不知道如何使用ASP.NET工具而不是JSON来发送整个事情

uttx8gqw

uttx8gqw1#

当我研究时,我发现Ronaldoz说的是真的,所以我所做的有助于解决问题:
我添加到binded发送数组在同一个请求:
第一个月
然后我做了一个隐藏的输入,并将Json数组写入其中,以便一起读取和发送,然后在提交按钮上创建了一个函数:
<input type="hidden" name="instalmentList" id="instalmentList" value="" />
<input type="submit" value="Create" onsubmit="UpdateHiddenArray();" class="btn btn-primary" />
函数(arrayInstalments是包含wanted list的数组):

function UpdateHiddenArray() {
            instalmentsJson = JSON.stringify(arrayInstalments);
            $("#instalmentList").val(instalmentsJson);
            document.querySelector("#instalmentList").value = instalmentsJson;
        }

字符串
最后,在控制器上,我请求数组并转换为DTO类:

[HttpPost]
        [ValidateAntiForgeryToken]
        public async Task<IActionResult> CreateWithInstalment([Bind("Name,Fee,Discount,Fine,Id")] PaymentCondition paymentCondition)
        {
            var jsonInstalmentList = Request.Form["instalmentList"];
            var instalmentList = JsonConvert.DeserializeObject<List<InstalmentDTO>>(jsonInstalmentList);

            ...
        }


这对我很有效,我用通常的绑定对象asp.net的方法得到了对象,然后得到了我的列表。

相关问题