首页 > 解决方案 > .NET Core 提交将所有数据传递给控制器​​,除了 id

问题描述

.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);
}

标签: c#.net-coreasp.net-core-tag-helpers

解决方案


有时隐藏字段中的 asp-for 由于某些原因无法正常工作,我通常也使用 value

 <input asp-for="@Model[i].Id" value"@Model[i].Id" type="hidden" />

恕我直言,您必须将 Id 添加到您的模型中,以防它不是更新,而是创建

public ViewModel
{
public List<EvaluationsModel> EvaluationsModels {get;set;}
public int Id { get; set;}
{

并将隐藏字段 ID 添加到视图中

@model ViewModel

....

<form id="evalForm" asp-action="@createOrUpdate">

<input type="hidden" asp-for="Id" value="@Model.Id" />

@for (var i = 0; i < Model.EvaluationsModels.Count; i++)

行动

public IActionResult Update(ViewModel viewModel)

推荐阅读