视图中的数据与传入的控制器不匹配
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);
}
我有一个应用程序,我需要在其中添加分配给它的包裹和货件。 查看代码:
@*
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);
}