2011-07-20 67 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