Я пытаюсь создать атрибут для проверки моей модели.Пользовательский атрибут «По крайней мере»
В моей модели у меня есть список. Этот список должен иметь определенное количество элементов, которое соответствует критериям, например «по крайней мере 1 активный элемент» или «по крайней мере 1 активный элемент с именем« Джон »в качестве его имени».
Мой код-то вроде этого:
public class Foo
{
[AtLeast(1, new Tuple<string, object>("Active", true))]
public List<Item> ListOfSomething { get; set; }
[AtLeast(1, new Tuple<string, object>("Active", true), new Tuple<string, object>("Name", "John"))]
public List<Item> AnotherList { get; set; }
}
public class Item
{
public string Name { get; set; }
public bool Active { get; set; }
}
public class AtLeastAttribute : ValidationAttribute
{
public int MinLength { get; set; }
public Tuple<string, object>[] PropertiesAndValues { get; set; }
public AtLeastAttribute(int minLength,params Tuple<string, object>[] propsNValues)
{
MinLength = minLength;
PropertiesAndValues = propsNValues;
}
}
Я пытался передать Tuple<string, object>
сказать собственности и требуемое значение. Но я получаю эту ошибку:
An attribute argument must be a constant expression, typeof expression or array creation expression of an attribute parameter type
У кого-нибудь есть способ сделать это?
Возможно, вместо кортежей, передать пара параметров или конкатенированную строку типа '" Active, True "," Name, John "'? – DavidG
Вы можете сохранить свои Tuples в статическом словаре и дать ключ атрибуту AtLeast. '[AtLeast (1,« IsActiveTrue »)], но предложение DavidG работает для элементов данных, которые легко конвертируются в строку и из нее, что, вероятно, будет большей частью того, для чего вы будете использовать это. – Grax