【发布时间】:2021-06-13 09:10:40
【问题描述】:
我构建了一个解决方案,使用 JQuery ajax 将单个 JSON 记录发送到我的 .NET 控制器,效果很好,看起来像这样..
$.ajax({
data: JSON.stringify({'prodId': 1041, 'sizeId': "XS", 'pdtWeight': 2.3}),
contentType: "application/json; charset=utf-8",
type: 'POST',
url: '@Url.Action("AdjustWeight", "ProductBins")',
success: function (data) {
//do something great here
}
});
这是控制器“ProductBins”中的代码:“AdjustWeight”
[Route("ProductBins")]
[ApiController]
public class ProductBinsController : Controller
{
private readonly ApplicationDbContext applicationDbContext;
public ProductBinsController(ApplicationDbContext _applicationDbContext)
{
applicationDbContext = _applicationDbContext;
}
[HttpPost]
[Route("AdjustWeight")]
public JsonResult AdjustWeight(AdjustWeightRequest adjustWeightRequest)
{
var AdjWt = (
from pr in applicationDbContext.Products
join pc in applicationDbContext.Prodcolors on pr.ProdId equals pc.ProdId
join pd in applicationDbContext.Proddetails on pc.PclId equals pd.PclId
where pr.ProdId == adjustWeightRequest.ProdId && pd.PdtSize == adjustWeightRequest.SizeId
select pd.PdtId
).ToList();
var prodDetailsToUpdate = applicationDbContext.Proddetails.Where(i => AdjWt.Contains(i.PdtId));
foreach (var item in prodDetailsToUpdate)
{
item.PdtWeight = adjustWeightRequest.PdtWeight;
}
applicationDbContext.SaveChanges();
return Json(true);
}
}
这是 AdjustWeightRequest 类代码..
public class AdjustWeightRequest
{
public int ProdId { get; set; }
public string SizeId { get; set; }
public decimal PdtWeight { get; set; }
}
上面的所有代码都很棒。正是我需要它做的事情。但是,我可能需要向控制器发送 1 个或多个 JSON 记录。在上面的示例中,我只发送 1 个 JSON 记录效果很好。出于测试目的,我在发送 2 个 JSON 记录的 JavaScript 函数中对以下内容进行了硬编码...
$.ajax({
data: JSON.stringify([{'prodId': 1041, 'sizeId': "XS", 'pdtWeight': 2.3}, {'prodId': 1041, 'sizeId': "S", 'pdtWeight': 3.2}]),
contentType: "application/json; charset=utf-8",
type: 'POST',
url: '@Url.Action("AdjustWeight", "ProductBins")',
success: function (data) {
//do something great here
}
});
请注意方括号的添加以及每条记录中的细微差别(sizeId 和 pdtWeight)。所以我假设我需要在控制器中进行一些 foreach 循环来处理每个 JSON 记录(1 个或更多)并相应地更新数据库。但是,在我到达那里之前,我从控制器收到了 Javascript 400 Bad Request 错误,因此我尝试在控制器类或请求类中放置断点并进行调试不起作用。似乎添加方括号不起作用,因为当我使用方括号对我的工作代码(单个记录)进行简单调整时,我得到相同的 400 Bad Request 错误。
仅供参考,我对 JSON 进行了硬编码以用于测试目的,并在本文中便于解释这一点。最终的解决方案将构建一个 JavaScript 数组并将其传递给 JSON.stringify,它会自动添加方括号。希望这些信息足以提供一些洞察力..
已解决...@AussieJoe 解决方案效果很好。这是更新的控制器代码..
public JsonResult AdjustWeight(AdjustWeightRequest[] adjustWeightRequest)
{
foreach (var item2 in adjustWeightRequest)
{
var AdjWt = (
from pr in applicationDbContext.Products
join pc in applicationDbContext.Prodcolors on pr.ProdId equals pc.ProdId
join pd in applicationDbContext.Proddetails on pc.PclId equals pd.PclId
where pr.ProdId == item2.ProdId && pd.PdtSize == item2.SizeId
select pd.PdtId
).ToList();
var prodDetailsToUpdate = applicationDbContext.Proddetails.Where(i => AdjWt.Contains(i.PdtId));
foreach (var item in prodDetailsToUpdate)
{
item.PdtWeight = item2.PdtWeight;
}
applicationDbContext.SaveChanges();
}
return Json(true);
}
【问题讨论】:
-
你试过 public JsonResult AdjustWeight(List
adjustWeightRequest) 吗?
标签: c# jquery asp.net json asp.net-core