[英]ASP.NET Core - Bind IEnumerable<T> to a ViewModel field on POST
[英]Bind ASP.NET ViewModel to List of Lists
我有一个员工 Model
public class StaffMember
{
public int Id { get; set; }
public string JobTitle {get; set;}
public virtual ICollection<Payment> Payments { get; set; }
}
和付款 Model:
public class Payment
{
public int Id { get; set; }
public string Status { get; set; } = "Pending";
public float Amount { get; set; }
public int Month { get; set; }
}
所以每个 StaffMember 总共有 12 笔付款,每个月付款一次。
现在我想在视图中查看和编辑每个 StaffMember 的当月付款,所以我编写了这个 ViewModel:
public class MembersPaymentViewModel
{
public List<StaffMember> StaffMembers { get; set; }
}
在 cshtml 文件中,我查看所有成员并将付款放入文本框中,如下所示:
@foreach (var staffMember in staffMembers.Select((val, index) => new {index, val}))
{
<td>
@Html.TextBoxFor(m =>
m.StaffMembers[staffMember.index].Payments.ToList()
.FirstOrDefault(s => s.Month == currentMonth).Amount
</td>
}
问题是,当我发布表单时,ViewModel 中的 StaffMembers 列表始终为 null,但如果我访问 JobTitle 属性,它不是集合:
@Html.TextBoxFor(m =>
m.StaffMembers[staffMember.index].JobTitle)
ViewModel 正确绑定。 我的问题是,如何绑定 Payments 属性,以便 ViewModel 中的 StaffMembers 属性不返回 null。
您可以尝试将 name 属性添加到输入中,以便将数据绑定到Payments
:
@model MembersPaymentViewModel
@foreach (var staffMember in staffMembers.Select((val, index) => new {index, val}))
{
<td>
<input value=@Model.StaffMembers[staffMember.index].Payments.ToList()..FirstOrDefault(s => s.Month == currentMonth).Amount name="StaffMembers[@staffMember.index].Payments[0].Amount" />
</td>
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.