Я использую .NET Core и имею следующий код в модели представления:
public bool IsLocalArrangement { get; set; }
[RequiredIfLocalArrangements]
public string LocalArrangementDetail { get; set; }
Чтобы эта аннотация работала, я создал новый класс и получил следующий код:
using System.ComponentModel.DataAnnotations;
using MyProject.ViewModels;
namespace MyProject.Validation
{
public class RequiredIfLocalArrangements : ValidationAttribute
{
protected override ValidationResult IsValid(object value,
ValidationContext validationContext)
{
var vm = (ArrangementsViewModel)validationContext.ObjectInstance;
return string.IsNullOrEmpty((string)value) && vm.IsLocalArrangement ?
new ValidationResult("Please provide details for the local arrangement(s)")
: ValidationResult.Success;
}
}
}
Однако этот сценарий очень популярен, и теперь я реплицирую весь этот код на новые классы (RequiredIfOwnsVehicle и т. Д.), Где единственные переменные, которые мне нужно изменить, - это имя модели представления, логическое свойство внутри просмотреть модель, от которой она зависит, и сообщение с результатом проверки.
Как я могу сделать этот универсальный?
EDIT:
Пытаясь исследовать надежный проект из github, я столкнулся с этой проблемой с System.Web.Mvc
![](https://i.stack.imgur.com/f3PrG.png)