gpt4 book ai didi

c# - MVC 核心 - 模型绑定(bind)不会将 View 模型中的列表填充回 Controller

转载 作者:太空宇宙 更新时间:2023-11-03 14:56:06 25 4
gpt4 key购买 nike

<分区>

这个问题好像问的很多。我仔细检查了我在 StackOverflow 上可以找到的关于此的所有内容,据我所知,我正在做我应该做的一切,以确保 View 正确地遍历列表元素并为它们创建正确的 html。然而,模型绑定(bind)不起作用。

我有这两个 View 模型:

public class ProjectViewModel
{
public int ProjectId { get; set; }
public string Name { get; set; }
public string Description { get; set; }

public int? StatusId { get; set; }

public IList<CoordinateViewModel> Coordinates;
}

public class CoordinateViewModel
{
public int CoordinateId { get; set; }
public double X { get; set; }
public double Y { get; set; }
}

它们在 View 中是这样使用的(为便于阅读而简化):

@model ProjectViewModel

<div class="container">
<form asp-action="Edit" method="post">

<div asp-validation-summary="All" class="text-danger"></div>

<div class="row">
Coordinates
<table>
<thead>
<tr>
<th></th>
<th>X</th>
<th>Y</th>
</tr>
</thead>
<tbody>
@for (int i = 0; i < Model.Coordinates.Count; i++)
{
<tr>
<td>@Html.HiddenFor(x => Model.Coordinates[i].CoordinateId)</td>
<td>@Html.TextBoxFor(x => Model.Coordinates[i].X)</td>
<td>@Html.TextBoxFor(x => Model.Coordinates[i].Y)</td>
</tr>
}
</tbody>
</table>

</div>

<div class="row">
<div class="col-md-8 form-group">
<label asp-for="Description" class="control-label"></label>
<textarea asp-for="Description" class="form-control"></textarea>
<span asp-validation-for="Description" class="text-danger"></span>
</div>
</div>
<div class="row">
<div class="form-group">
<div class="col-md-offset-2 col-md-5">
<input type="submit" class="btn btn-primary" value="Submit" />
</div>
</div>
</div>
</form>
</div>

涉及的 Controller 操作是这个(为了便于阅读再次进行了编辑):

    [HttpPost]
[ValidateAntiForgeryToken]
public IActionResult Edit(ProjectViewModel viewModel)
{

return View(viewModel);
}

加载表单时,会填充坐标信息。

提交表单时,进入 Controller 操作方法的 View 模型包含 Coordinates 属性的空值,我不明白为什么。

25 4 0