2011-09-15 11 views
1

私は、法案を分割している当事者の総計とリストを表すView Modelを持っています。法案を分割する当事者は、それぞれ一定の割合を占めています(例:党Aは50%、党Bは20%、党Cは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; } 
} 

を基本的に、私は正確に100のすべての当事者の合計のためのSplitPercentageは私が最初にSplitPercentageにカスタム検証属性を追加したくなるが、私は」されたことを検証しますバリデーター内のすべての値を合計する方法がわかりません。私はおそらく、メインモデルのPartiesにカスタム検証属性を追加することができますか(それはどのように機能しますか)?それとも、誰かがこれを行うより良い方法を知っていますか?

EDIT: 私は(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

あなたののviewmodelにこの計算プロパティを追加し、追加することがVAを行い検証しますリッドの属性。これにより、サーバー側の検証が実行されます。 – fredlegrain

+0

私はfredlegrainが言ったようにして、上記の情報で終わった。みんなありがとう! – jrizzo

0

あなたはcustom validation attributeを使用して見て、あなたのList<BillPartyModel>カスタム検証でデモ

ためhereあなたは、彼らを見て、分割割合の性質上、容易モデルとループを確認することができます属性参照用のエディタのテンプレートを作成することができますそして、合計100

関連する問題