Мы используем сложные типы для управления нашими переводимыми полями, например:
[ComplexType]
public class Translated
{
[Required]
public string NL { get; set; }
[Required]
public string EN { get; set; }
[ScaffoldColumn(false)]
public string TranslatedText
{
get
{
return Util.Translate(NL, EN);
}
}
}
Мы требуем, чтобы поля присутствовали. Но в некоторых случаях все поле Translated является необязательным, как в:
public class Question
{
...
[Optional(ErrorMessage="Foo")]
public Translated Description { get; set; }
...
}
Однако кажется, что атрибут Optional вычисляется, и когда он возвращает false, с результатом ничего не происходит.
class OptionalAttribute : ValidationAttribute
{
public override bool IsValid(object value)
{
return false;
}
}
Когда я помещаю необязательный атрибут в не сложный тип, он работает, как ожидалось, сообщение об ошибке всегда будет Foo.
Конечная цель - позволить описанию быть пустым в обоих случаях, но когда одно из полей заполнено, ошибки, конечно, должны распространяться.
Остановка рекурсии проверки приведет к тому, что поле станет необязательным, но это также предотвратит проверку полей в случае, если они заполнены.
Есть идеи, как это сделать?