我有一个员工模型
public class StaffMember
{
public int Id { get; set; }
public string JobTitle {get; set;}
public virtual ICollection<Payment> Payments { get; set; }
}
以及支付模式:
public class Payment
{
public int Id { get; set; }
public string Status { get; set; } = "Pending";
public float Amount { get; set; }
public int Month { get; set; }
}
因此,每位员工总共有12笔付款,每月一笔。
现在我想在一个视图中查看和编辑每个员工当月的付款,所以我写了这个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 List总是为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>
}