【发布时间】:2016-09-22 08:05:00
【问题描述】:
我正在尝试验证表单提交但我只想在另一个属性设置为 true 时验证一个属性。
我的两个属性:
[DisplayName(Translations.Education.IsFeaturette)]
public bool IsFeaturette { get; set; }
[DisplayName(Translations.Education.AddFeaturetteFor)]
[CusomValidatorForFeaturettes(IsFeaturette)]
public string[] Featurettes { get; set; }
自定义注解:
public class CusomValidatorForFeaturettes: ValidationAttribute
{
private readonly bool _IsFeatturette;
public CusomValidatorForFeaturettes(bool isFeatturette): base("NOT OK")
{
_IsFeatturette = isFeatturette;
}
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
if (value == null && _IsFeatturette )
{
var errorMessage = FormatErrorMessage(validationContext.DisplayName);
return new ValidationResult(errorMessage);
}
return ValidationResult.Success;
}
}
如果 isfeature 为真,那么 Featurettes 必须有一个值!
我得到错误:
非静态字段、方法或 属性“EducationViewModel.IsFeaturette”
我不能将这个属性设为静态因为这会给我带来问题,因为这个属性是用 enityframework 设置的,我不希望更改任何内容。如何在不使属性静态的情况下完成此操作?
【问题讨论】:
-
考虑使用foolproof 条件属性,包括它们的
[RequiredIfTrue]属性,这将为您提供客户端和服务器端验证 -
感谢您的提示,但是我现在想避免使用框架。你知道怎么解决是这样的吗?
-
您不能将属性作为参数传递给属性-它必须是
string(一个常量值)-在您的情况下[CusomValidatorForFeaturettes("IsFeaturette")]表示“其他”属性的名称.
标签: c# asp.net-mvc-5 data-annotations