您可以實施自己的ValidationAttribute
。也許是這樣的:
public class RequireWhenCategoryAttribute : ValidationAttribute
{
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
var employee = (EmployeeModel) validationContext.ObjectInstance;
if (employee.CategoryId == 1)
{
return ValidationResult.Success;
}
var emailStr = value as String;
return string.IsNullOrEmpty(emailStr) ? new ValidationResult("Value is required.") : ValidationResult.Success;
}
}
public sealed class EmployeeModel
{
[Required]
public int CategoryId { get; set; }
[RequireWhenCategory]
public string Email { get; set; } // If CategoryId == 1 then it is required
}
這只是一個例子。它可能有鑄造問題,我不確定這是解決此問題的最佳方法。
「*我不確定這是解決此問題的最佳方法。」解決此問題的其他方法是什麼? –
@ScottChamberlain優秀的問題!我不知道。我覺得這不知何故是一個漏洞抽象。進行驗證的屬性知道很多關於模型類型等內容。是否應通過屬性完成此操作?感覺這個模型太瞭解行爲,並且失去了模型的簡單性。那麼控制器是否應該這樣做?我仍然不確定。 – vcsjones
@ vcsjones:這是一個很好的方法,實際上我想避免控制器中的驗證邏輯,因爲這需要很多更改(根據更改要求),我不想這樣做。 –