У меня есть модель просмотра, которая представляет общий счет и список сторон, разделяющих счет.Каждая из сторон, разделяющих счет, получает определенный процент от общей суммы (например: Сторона А получает 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
в основной модели (и как это будет работать)?Или кто-то знает лучший способ сделать это?
РЕДАКТИРОВАТЬ: Я сделал, как предложено ниже, и закончил с этим (используя DataAnnotationsExtensions для тега EqualTo):
Модель
[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 в порядкечтобы получить подтверждение на стороне клиента.