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
之类的规则在客户端不受支持。
我有一个用于向导的 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
之类的规则在客户端不受支持。