我有一个viewModel我想在。上执行更多的自定义验证。
我已将viewModel从IValidatable
继承并进行了一些验证:
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
...
}
这很好但我只想要创建而不是编辑的验证。我认为这样做的唯一方法是如何在此方法中确定它是编辑还是创建。
有没有一种方法可以做到这一点,还是我想错误地解决这一切?
答案 0 :(得分:1)
为创建和插入操作使用单独的视图模型。如果您的验证规则不同,我认为无论如何使用单独的模型是值得的。
public class InsertMyObjectViewModel : IValidatable
{
[Required]
public string Name { get; set; }
// note the lack of Required attribute here
public string Address { get; set; }
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
...
}
}
单独编辑
public class UpdateMyObjectViewModel : IValidatable
{
[Required]
public string Name { get; set; }
[Required]
public string Address { get; set; }
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
...
}
}
如果您的业务规则在注册时指定客户的名称而不是他们的地址,则这可能是有意义的。但是,当用户修改其帐户时,您的业务规则可能需要一个地址。在很多情况下,使用每个对象的1:1 viewmodel:action比率是有意义的。
现在,当您编写Validate
逻辑时,它变得更加简单。可能会有一些重复,但是当您的业务规则在将来发生变化时更容易修改。