繁体   English   中英

将 ASP.NET ViewModel 绑定到列表列表

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM