将数组传递给控制器​​ asp.net MVC

Passing array to Controller asp.net MVC

在我使用 JQuery 的应用程序中,我在 table 中收集数据并将其传递给数组。

然后我想将该值保存在我的数据库中。

在控制器中,它显示通过的数据计数。但里面是空的。不确定变量是否正确。你能帮我解决这个问题吗?

这是JQuery代码

function createOrder() {

  const Orders = $("#tblParts tbody tr").filter(function() {
    const cells = $(this).find("td");
    return cells.eq(8).text().trim() != ""
  }).map(function() {
    const cells = $(this).find("td");
    return { [cells.eq(0).text().trim()] : +cells.eq(8).text()
    }
  }).get()

  $.ajax({
    type: "POST",
    url: "/Home/InsertOrder",
    data: JSON.stringify(Orders),
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function(r) {
      alert(r + " record(s) inserted.");
    }
  });
}

这是控制器,

  public JsonResult InsertOrder(List<string> Orders)
  {

  }

我不确定这个List<string> Orders我叫对了吗?

正在编辑

这是数组数据

这是控制器端的。

HTML代码

<table class="table" id="tblParts">
  <tr>
    <th> @Html.DisplayName("Part Number") </th>
    <th> @Html.DisplayName("Part Description") </th>
    <th> @Html.DisplayName("Model") </th>
    <th> @Html.DisplayName("Stock Available") </th>
    <th> @Html.DisplayName("Re-Order Qty") </th>
    <th> @Html.DisplayName("Part Category") </th>
    <th> @Html.DisplayName("ABCD Category") </th>
    <th> @Html.DisplayName("New Order Qty") </th>
    <th></th>
  </tr> @foreach (var item in Model.RecognizedPartsViewModel) { <tr>
    <td style="display:none;"> @Html.DisplayFor(modelItem => item.Id) </td>
    <td>
      <a href="#"> @Html.DisplayFor(modelItem => item.PartNo)
    </td>
    <td>
      <a href="#"> @Html.DisplayFor(modelItem => item.Description)
    </td>
    <td>
      <a href="#"> @Html.DisplayFor(modelItem => item.Model)
    </td>
    <td>
      <a href="#"> @Html.DisplayFor(modelItem => item.AvaQty)
    </td>
    <td>
      <a href="#"> @Html.DisplayFor(modelItem => item.ReOrderQty)
    </td>
    <td>
      <a href="#"> @if (PartCategory.Exists(x => x.Value == item.PartCato.ToString())) { @PartCategory.Find(x => x.Value == item.PartCato.ToString()).Text }
    </td>
    <td>
      <a href="#"> @Html.DisplayFor(modelItem => item.ABCD)
    </td>
    <td contenteditable='true'></td>
  </tr> }
</table>

我只是将对象转换为键值对数组

function createOrder() {

  const Orders = $("#tblParts tbody tr").filter(function() {
    const cells = $(this).find("td");
    return cells.eq(8).text().trim() != ""
  }).map(function() {
    const cells = $(this).find("td");
    return { [cells.eq(0).text().trim()] : +cells.eq(8).text()
    }
  }).get()
var result = Object.keys(Orders).map((key) => [Number(key), obj[key]]);
  $.ajax({
    type: "POST",
    url: "/Home/InsertOrder",
    data: JSON.stringify(result),
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function(r) {
      alert(r + " record(s) inserted.");
    }
  });
}

控制器:

public JsonResult InsertOrder(Dictionary<int,int> Orders)
  {

  }

现在您可以使用上述更改访问控制器中的数据。

你有一个非常奇怪的数组,它在 c# 中无效。所以尝试使用字典作为动作参数

public JsonResult InsertOrder([FromBody]Dictionary<int,int>[] Orders)

它会起作用,但它是一种非常奇怪的格式。恕我直言,将 javascript 数据转换为更易于使用的数据。

var newOrders = $.map(Orders, function (element) {
  var obj = {};
  for (var key in element) {
    obj.Id = key;
    obj.Quantity = element[key];
   }
  return obj;
});

创建class

public class IdQ
{
  public int Id {get;set;}
  public int Quantity {get; set;}
}

和行动

public JsonResult InsertOrder([FromBody]List<IdQ> idQs)