我正在使用Ajax调用从列表中删除项目。当用户单击删除按钮(具有ID的行的每个按钮)时,它将Ajax调用(发布)发送到Order / RemoveFromCart。当到达后端时,我将从列表中删除该项目。我确定从控制器返回数据时确实要删除我要删除的项目。问题是当我将div并从响应中调用html(data)时,它总是删除列表中的最后一项。
谢谢您的帮助。
我尝试将dotnet更新到最新版本。 我试图删除Ajax调用并重新加载整个视图-解决了该问题,但我想使用Ajax调用。
@for (int i = 0; i < Model.CartItems.Count; i++)
{
<input asp-for="CartItems[i].ProductId" type="hidden">
<tr>
<td>
<input type="text" class="inputTextWithoutBorder" readonly="readonly" asp-for="CartItems[i].Product">
</td>
<td>
<select class="select-table" asp-for="@Model.CartItems[i].Packaging" asp-items="@Model.CartItems[i].PackageTypes"></select>
</td>
<td>
<input type="text" class="inputTextWithoutBorder" asp-for="@Model.CartItems[i].Amount" placeholder="Vyberte množství...">
</td>
<td>
<button id="removeFromCartId" onclick="removeFromCart(this);" type="button" value="@i" class="removeButton"></button>
</td>
</tr>
}
[HttpPost]
public IActionResult RemoveFromCart(OrderModel model, int itemToRemove)
{
if (model.CartItems[itemToRemove] != null)
{
model.CartItems.RemoveAt(itemToRemove);
}
return PartialView("_OrderCartWithCalendarPartial", model);
}
型号:
public class CartModel
{
public int ProductId { get; set; }
public int Amount { get; set; }
public string Packaging { get; set; }
public string Product { get; set; }
public List<SelectListItem> PackageTypes { get; } =
new List<SelectListItem>{
new SelectListItem {Value = "", Text = ""},
};
}
Javascript:
function removeFromCart(button) {
var index = button.value;
var placeholderElement = $('#orderFormId');
var myformdata = placeholderElement.serialize()
+ "&itemToRemove=" + index;
var result = $.post("/Order/RemoveFromCart", myformdata);
result.done(function (data) {
$("#cartWithCalendarDiv").html(data);
setDateFieldToZero();
});
}
问题场景: 通过Ajax列表发送有两个项目(item0,item1)。控制器接收到包含两个项目的精确列表。在控制器中删除item0并返回具有该更新模型的局部视图。页面仅使用item0重新加载。为什么?