【发布时间】:2021-01-12 14:26:27
【问题描述】:
我遇到了 MVC 控制器已发送记录列表的情况。 这些记录显示在视图中,以便每条记录都是一个表单,因此可以逐条记录。
@model IList<FMS.Application.Models.TransferLineUpdateResponse>
@{
ViewData["Title"] = "Transfer Lines Page";
}
<div class="row">
<div class="col-12">
@foreach (var item in Model)
{
<form method="post" class="form-inline">
<div class="form-group">
<input type="hidden" asp-for="@item.Id" readonly class="form-control" />
<input type="hidden" asp-for="@item.TransferHeaderId" readonly class="form-control" />
</div>
<div class="form-group">
<label asp-for="@item.Item"></label>
<input asp-for="@item.Item" readonly class="form-control" />
</div>
<div class="form-group">
<label asp-for="@item.ToLocationId"></label>
<select class="form-control" asp-for="@item.ToLocationId" asp-items="ViewBag.ToLocations"></select>
</div>
<div class="form-group">
<input type="submit" asp-route-status="Accepted" class="btn btn-success" /> |
<input type="submit" asp-route-status="Rejected" class="btn btn-danger" />
</div>
</form>
}
</div>
</div>
当单击两个按钮之一并调用表单提交时,作为控制器中的参数,我的所有记录(如 Id、ToLocationId)为 null 或空 guid,以防属性具有类型 guid。为什么不采取实际上已在视图中更改的数据? 问候
P.S.这里是控制器的代码
[HttpGet("Transfer/Details/{id}")]
public async Task<IActionResult> Details(Guid id)
{
var lines = await _transferLineService.GetTransferLines(id);
var locations = await _locationService.GetLocations();
var customLocations = locations
.Where(w=>w.Code != "Tranzit")
.Select(s => new
{
Id = s.Id,
Description = $"{s.Code} - {s.Description}"
});
ViewBag.ToLocations = new SelectList(customLocations, "Id", "Description");
return View(lines);
}
[HttpPost("Transfer/Details/{transferHeaderId}")]
public async Task<IActionResult> AcceptDetails(Guid transferHeaderId, TransferLineUpdateResponse update)
{
var result = await _transferLineService.UpdateTransferLine(update);
await _transferHeaderService.UpdateTransferHeaderStatus(update.TransferHeaderId);
return RedirectToAction("Details",new { transferHeaderId = update.TransferHeaderId });
}
【问题讨论】:
标签: model-view-controller asp.net-core-mvc