ajax - ASP.NET Core 如何动态删除列表元素?
问题描述
我希望用户能够编辑订单并删除一些项目。为此,我为每个项目添加了一个删除按钮(您可以在下面的代码中看到它)。
部分视图 Views/Shared/EditorTemplates/Item.cshtml(属性 data-id 是硬编码的,因为我不知道如何传递当前的 OrderItem Id):
@model TimeTracker.Models.OrderItem
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-group">
<label asp-for="Product" class="control-label"></label>
<input asp-for="Product" class="form-control" />
<span asp-validation-for="Product" class="text-danger"></span>
<input class="btn btn-default" type="button" id="btnDel" data-id="1" value="Remove" />
</div>
在 ajax 调用中会出现控制台中的错误,它指的是控制器方法。这里我假设我data
在 ajax 调用中填写的参数不正确。在我的情况下,我真的不知道如何正确填写。
加载资源失败:服务器响应状态为 405 () :5001/Orders/RemoveItem:1
阿贾克斯调用:
$("#btnDel").on('click', function () {
$.ajax({
async: true,
data: { order: $('#form').serialize(), orderItemId: $('#btnDel').data('id') },
type: "DELETE",
url: '/TaskTypes/RemoveItem',
success: function (partialView) {
console.log("partialView: " + partialView);
$('#itemsContainer').html(partialView);
}
});
});
控制器方法:
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> RemoveItem([Bind("OrderItems")] Order order, int orderItemId)
{
order.OrderItems.RemoveAll(c => c.Id == orderItemId);
return PartialView("Items", order);
}
解决方案
当您使用ValidateAntiForgeryToken时,您必须在 ajax 标头中传递 RequestVerificationToken 以验证您的请求。
有关防止跨站点请求的更多详细信息,请访问https://docs.microsoft.com/en-us/aspnet/core/security/anti-request-forgery?view=aspnetcore-3.1 。
推荐阅读
- c++ - 在 C++ 中自动向下转换函数参数
- sql - 在 MS Access VBA 中用户输入的打印页数
- unity3d - Unity .GetParticles() 高 CPU 峰值
- python - 以数组中的某个值为条件
- r - 如何在 ggplot 背景(不是面板)上添加图像?
- typescript - 如何在 Typescript 中动态扩展(添加属性)泛型类作为参数?
- excel-formula - 是否有一个 Excel 公式可以从包含混合数据的列中的最后 25 行中提取数字?
- c# - 将获取datagridvie 中的值的代码缩短到文本框?
- python - 尽管两个查询集在 shell 中打印出相同的结果,但 Django 的 assertQuerysetEqual() 方法还是失败了?
- javascript - 通过从另一个元素查询的类名获取元素