2011-09-15 35 views
1

我有一個代表被分裂法案雙方的總賬單和列表視圖模型。各方分攤的比例各佔一定比例(例如:甲方佔50%,乙方佔20%,丙方佔30%)。MVC3驗證總計元素列表

這個模型看起來是這樣的:

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,但我m不知道如何將驗證器中的所有值相加。我可以在主模型中添加一個自定義驗證屬性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
public int Total { get { return Parties.Sum(p=>p.SplitPercentage); } } 

然後當你驗證模型確保總量= 100

+2

您可以添加此計算性能到您的視圖模型,並添加VA lidation屬性。這將觸發服務器端驗證。 – fredlegrain

+0

我確實喜歡fredlegrain說過的,並以上面提到的信息結束。謝謝大家! – jrizzo

0

你可以看看使用custom validation attribute併爲您的List<BillPartyModel>看到here用於演示

在你自定義的驗證屬性,那麼你可以很容易地檢查模型和環比分流百分比的屬性,看看它們創建編輯模板共有100