将数组传递给控制器 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)
在我使用 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)