2013-12-17 86 views

回答

16

您可以實施自己的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 
} 

這只是一個例子。它可能有鑄造問題,我不確定這是解決此問題的最佳方法。

+0

「*我不確定這是解決此問題的最佳方法。」解決此問題的其他方法是什麼? –

+0

@ScottChamberlain優秀的問題!我不知道。我覺得這不知何故是一個漏洞抽象。進行驗證的屬性知道很多關於模型類型等內容。是否應通過屬性完成此操作?感覺這個模型太瞭解行爲,並且失去了模型的簡單性。那麼控制器是否應該這樣做?我仍然不確定。 – vcsjones

+2

@ vcsjones:這是一個很好的方法,實際上我想避免控制器中的驗證邏輯,因爲這需要很多更改(根據更改要求),我不想這樣做。 –