我有一个视图模型,代表一个总账单和分配账单的各方列表。分摊账单的各方各占一定比例(例如:甲方占50%,乙方占20%,丙方占30%)。
模型看起来像这样:
public class BillModel
{
public int Total { get; set; }
public List<BillPartyModel> Parties { get; set; }
}
public class BillPartyModel
{
public string Name { get; set; }
public int SplitPercentage { get; set; }
}
基本上,我想验证所有参与方的SplitPercentage
总计正好为100.我最初想将自定义验证属性添加到SplitPercentage
,但我不确定如何汇总所有验证器中的值。我是否可以在主模型中向Parties
添加自定义验证属性(以及如何工作)?或者有人知道更好的方法吗?
修改 我按照下面的建议做了,最后得到了这个(使用EqualTo标签的DataAnnotationsExtensions):
模型
[EqualTo("TotalPercent", ErrorMessage = "Percentages do not add up to 100%.")]
public int SplitPercentage { get { return this.Allocations.Sum(a => a.Allocation); } }
public int TotalPercent { get { return 100; } }
视图的
@Html.HiddenFor(m => m.SplitPercentage)
@Html.ValidationMessageFor(m => m.SplitPercentage)
@Html.EditorFor(m => m.BillPartyModel)
...然后我只使用JavaScript OnChange事件来更新AllocationTotal以获得客户端验证。
答案 0 :(得分:2)
public int Total { get { return Parties.Sum(p=>p.SplitPercentage); } }
然后,当您验证模型时,请确保总计= 100
答案 1 :(得分:0)
您可以使用custom validation attribute查看并为List<BillPartyModel>
创建一个编辑器模板,参见here进行演示
在您的自定义验证属性中,您可以轻松检查模型并循环拆分百分比属性以查看它们总计100