视图中的数据与传入的控制器不匹配

Data on view doesn't match to passed in controller

我有一个应用程序,我需要在其中添加分配给它的包裹和货件。 查看代码:

@*
    For more information on enabling MVC for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860
*@
@{
}
@model FormViewModel

<h1 class="display-4"> Edycja paczki</h1>



@if (Model.PACK_STATE == true)
{
    <p>Paczka jest zamknięta, musisz ją otworzyć przed edycją. UWAGA! Kliknięcie wiązę się z zapisem tylko blokady.</p>
    <a asp-controller="Package" asp-action="Unlock" asp-route-Id="@Model.PACK_ID"><button class="btn-info btn-sm">Odblokuj</button></a>
}

@if (Model.PACK_STATE == false)
{


<form asp-controller="Package" asp-action="AddNewShipment" method="post">
    <label>Nazwa: </label><br>          @Html.TextBoxFor(x => Model.PACK_NAME) <br />
    <label>Miasto docelowe: </label><br> @Html.TextBoxFor(x => Model.PACK_DESTINATION_CITY) <br />
    <label for="PACK_STATE">Zamknięcie przesyłki</label>
    @Html.CheckBoxFor(x => Model.PACK_STATE)
    @Html.HiddenFor(x => Model.PACK_ID)
    <br><br>


    @for (int i = 0; i < Model.SHIP_LISTOF_SHIPMENTS.Count; i++)
    {
        <label>Nazwa: </label><br> @Html.TextBoxFor(x => Model.SHIP_LISTOF_SHIPMENTS[i].SHIP_NAME) <br />
        <label>Adres docelowy: </label><br> @Html.TextBoxFor(x => Model.SHIP_LISTOF_SHIPMENTS[i].SHIP_DESTINATION_ADRESS) <br />
        <label>Masa przesyłki :</label><br> @Html.TextBoxFor(x => Model.SHIP_LISTOF_SHIPMENTS[i].SHIP_MASS) <br>
        @Html.HiddenFor(x => Model.SHIP_LISTOF_SHIPMENTS[i].SHIP_ID)
        @Html.HiddenFor(x => Model.SHIP_LISTOF_SHIPMENTS[i].SHIP_BELONG_TO_PACKAGE)
        @Html.HiddenFor(x => Model.SHIP_LISTOF_SHIPMENTS[i].SHIP_DESTINATION_ADRESS)

        <button asp-controller="Package" asp-action="DeleteSpecificShipment" method="post" asp-route-index=@i>Usuń paczkę</button>

        <br />
        <br />

    }
    
   

    <button asp-controller="Package" asp-action="AddNewShipment" method="post">Dodaj nową przesyłkę do listy</button>
    <button asp-controller="Package" asp-action="Save" method="post">Zapisz paczkę</button>

</form>



}

用户单击 'Usuń paczkę' 后,表单将发送到控制器中的此操作:

[HttpPost]
        public IActionResult DeleteSpecificShipment(FormViewModel form, int index)
        {
            
            form.SHIP_LISTOF_SHIPMENTS.RemoveAt(index);
            var newList = new List<Shipment>();
            foreach (var x in form.SHIP_LISTOF_SHIPMENTS) {
                var ship = new Shipment();
                ship.SHIP_BELONG_TO_PACKAGE = x.SHIP_BELONG_TO_PACKAGE;
                ship.SHIP_DESTINATION_ADRESS = x.SHIP_DESTINATION_ADRESS;
                ship.SHIP_ID = x.SHIP_ID;
                ship.SHIP_MASS = x.SHIP_MASS;
                ship.SHIP_NAME = x.SHIP_NAME;
                newList.Add(ship);
            }
            
            form.SHIP_LISTOF_SHIPMENTS = newList;
            return View("~/Views/Package/NewEdit.cshtml", form);
            }

最后的断点显示正确的列表(没有删除的元素 - 取决于索引)。不幸的是,在查看列表中包含除最后一个之外的所有货件。好像只有最后一批货被删除了,我不知道为什么。 有人可以帮助我吗?

问题并不容易而且微不足道。我需要清除控制器中的状态模型。 @html 标签助手不刷新模型,而是使用旧状态。 现在我的方法是:

 [HttpPost]
        public IActionResult DeleteSpecificShipment(FormViewModel form, int index)
        {
            ModelState.Clear(); //Added here
            form.SHIP_LISTOF_SHIPMENTS.RemoveAt(index);
            return View("~/Views/Package/NewEdit.cshtml", form);
        }