为什么我的控制器返回错误的响应数据?

时间:2019-07-16 19:58:05

标签: asp.net-core

我正在使用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重新加载。为什么?

0 个答案:

没有答案