私は、法案を分割している当事者の総計とリストを表す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を更新し、クライアント側の検証を取得するだけです。
あなたののviewmodelにこの計算プロパティを追加し、追加することがVAを行い検証しますリッドの属性。これにより、サーバー側の検証が実行されます。 – fredlegrain
私はfredlegrainが言ったようにして、上記の情報で終わった。みんなありがとう! – jrizzo