我们使用复杂类型来管理我们的可翻译字段,如下所示:
[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。
最终目标是在这两种情况下都允许描述为空,但是当其中一个字段被填充时,错误当然应该传播。
停止验证递归将导致该字段是可选的,但它也会阻止验证字段以防它们被填写。
关于如何做到这一点的任何想法?