ViewModel 的条件验证

Conditional Validation of ViewModels

我有一个用于向导的 ViewModel,它包含两个单独的 ViewModel,用于将部分视图加载到向导中。根据在步骤 1 中选择的选项,我需要验证步骤 2 或步骤 3。第 2 步和第 3 步的视图模型有自己的 AbstractValidator,它工作得很好,因为它包括客户端验证。问题是,如果我使用 ModelState.IsValid,其中一个 VM 总是无法验证,因为它是空的(该步骤未填写)。有没有办法跳过其中一个视图模型的验证?

假设您有以下模型:

public class PersonViewModel
{
    [Required]
    public string Email { get; set; }

    [Required]
    public string Password { get; set; }

    [Required]
    public string FullName { get; set; }
}

但是你想在模型验证中排除FullName,因为你也在FullName没有填写的地方使用模型,你可以通过以下方式实现:

ModelState.Remove("FullName");

希望对朋友有帮助:))

我最终得出的解决方案非常简单,但我没有在文档中发现它。您可以调用 $('#somecontainer').valid(),它将显示受支持控件的验证消息,如果容器中的所有控件都有效,也可以调用 return true。它不适用于所有情况,因为 GreaterThan 之类的规则在客户端不受支持。