绑定ASP.NET ViewModel到列表列表



我有一个员工模型

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>
}

最新更新