2011-07-20 35 views
1

我有一个viewModel我想执行一些更多的自定义验证。MVC自定义验证确定是否编辑或插入

我已经做了我的ViewModel从IValidatable继承,并有一些验证在:

public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) 
{ 

    ... 

} 

这工作得很好,但我只想要创建和编辑未验证。我在想这样做的唯一方法就是在这个方法中如何确定它是编辑还是创建。

有没有办法做到这一点,或者我想不正确地处理这件事?

回答

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视图模型:操作比率是有道理的。

现在,当你编写你的Validate逻辑时,它变得更简单。可能会有一些重复,但是当您的业务规则在未来发生变化时更容易进行修改。

+0

非常感谢! – AnonyMouse