【发布时间】:2021-11-26 01:35:43
【问题描述】:
.NET Core 3.1 与 EF Core,尝试更新加载到表单中的数据,但由于某种原因,它在提交时设置了 Id = 0,我不知道为什么。或者,如果我明确设置 id 值,控制器会为所有记录获取一个空值。重要的是,它是我发送到数据库的实体列表。
我可以使用相同的表单创建多个记录。但是,如果我用现有记录加载表单,并且想要进行更改,我不能。如果我没有为每条记录输入 ID,则每条记录的 ID 都设置为零。如果我确实输入了每条记录的 Id,则表单似乎正确提交,因为我正在查看 Chrome DevTools 并看到值在那里,包括 Id,但随后控制器获取了该数据,并且它为空.. .
ETA 当我提交每行都包含 ID 的表单时,似乎第 41 行导致了问题。我不知道这是否意味着 41 行太多,或者数据本身存在一些问题,这意味着控制器不会接收任何数据......但这些都没有意义,因为表单加载 62 行就好了。
这是它的简化版本,其中包含关键部分,因此很有意义。
我的模特:
@model List<EvaluationsModel>
我的表格:
@{
var createOrUpdate = "Update";
if (Model[0].IsCreate)
{
createOrUpdate = "Create";
}
}
<form id="evalForm" asp-action="@createOrUpdate">
@for (var i = 0; i < Model.Count; i++)
{
<textarea asp-for="@Model[i].Comments" rows="5" cols="75"></textarea>
<input asp-for="@Model[i].Id" type="hidden" />
}
<input type="submit" id="submitButton" value="@createOrUpdate" class="btn btn-primary" />
我的控制器方法:
public IActionResult Update(List<EvaluationsModel> evalRows)
{
_dostuffWith(evalRows);
return Redirect(toGet);
}
【问题讨论】:
-
您的列表项是否已经设置了 id?还是0?
-
是的 - id 是在创建时设置的,它在隐藏输入中的表单中填充就好了。但是当它们在更新时传递给控制器时,控制器变量为空。
-
我不确定,您是否尝试过传递@model 而不是@createOrUptade?span>
-
隐藏的输入在呈现的 html 中是什么样子的?
-
可能是因为
"Model" != "evalRows"?
标签: c# .net-core asp.net-core-tag-helpers