MVC3验证元素列表的总计

时间:2011-09-15 19:40:15

标签: asp.net-mvc asp.net-mvc-3

我有一个视图模型,代表一个总账单和分配账单的各方列表。分摊账单的各方各占一定比例(例如:甲方占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以获得客户端验证。

2 个答案:

答案 0 :(得分:2)

public int Total { get { return Parties.Sum(p=>p.SplitPercentage); } }

然后,当您验证模型时,请确保总计= 100

答案 1 :(得分:0)

您可以使用custom validation attribute查看并为List<BillPartyModel>创建一个编辑器模板,参见here进行演示

在您的自定义验证属性中,您可以轻松检查模型并循环拆分百分比属性以查看它们总计100