MVC自定义验证确定是编辑还是插入

时间:2011-07-20 19:57:01

标签: asp.net-mvc validation

我有一个viewModel我想在。上执行更多的自定义验证。

我已将viewModel从IValidatable继承并进行了一些验证:

public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{

   ...

}

这很好但我只想要创建而不是编辑的验证。我认为这样做的唯一方法是如何在此方法中确定它是编辑还是创建。

有没有一种方法可以做到这一点,还是我想错误地解决这一切?

1 个答案:

答案 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逻辑时,它变得更加简单。可能会有一些重复,但是当您的业务规则在将来发生变化时更容易修改。