Как я могу сделать пользовательский класс проверки универсальным в asp.net (если свойство 1 истинно, свойство 2 обязательно) - PullRequest
0 голосов
/ 03 мая 2018

Я использую .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

...