问题描述
我创建了一个有自己类的模型:
public class VMRequest()
{
public int Id { get; set; }
public List<Slot> Slots { get; set; }
public class Slot()
{
public DateTime Date { get; set; }
}
}
然后假设我向列表中添加了五个 Slot
,如果我这样做,它们会完美地显示在视图中:
<form asp-action="Request">
<div class="row flex-column">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
@foreach (var slot in Model.Slots)
{
<div class="col-md-6">
<div class="form-group">
<label asp-for="@slot.Date" class="control-label"></label>
<input asp-for="@slot.Date" type="date" class="form-control" />
<span asp-validation-for="@slot.Date" class="text-danger"></span>
</div>
</div>
}
<div class="form-group">
<input type="submit" value="Create" class="btn btn-primary" />
</div>
</div>
</form>
但是在提交时,即使将 VMRequest
模型传递给控制器,视图控件上的更改也不会传递 - 我不知道如何将标识符固定到每个控件??
我确定这是可能的!?
解决方法
将您的代码更改为:
@for(int x = 0; x < Model.Slots.Length;x++)
{
<div class="col-md-6">
<div class="form-group">
<label asp-for="@Model.Slots[x].Date" class="control-label"></label>
<input asp-for="@Model.Slots[x].Date" type="date" class="form-control" />
<span asp-validation-for="@Model.Slots[x].Date" class="text-danger"></span>
</div>
</div>
}
那么回寄的表格就是正确的。
,每个元素都需要用索引命名以绑定回模型。 https://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx/ 有一个很好的例子。
简而言之: 在 for 循环中使用 razor 组件应该可以为您处理这个问题:
{{1}}