MVC模型验证取决于是否填充表单

时间:2014-11-26 14:27:05

标签: asp.net-mvc asp.net-mvc-4

我有一个viewmodel,它由三个模型组成,它们都作为一个单独的表单显示在屏幕上。

public class ViewModel
{
    public PersonVM person { get; set; }
    public DepartmentVM department { get; set; }
    public EmploymentVM employment { get; set; }
}

当用户填写表单时,他们可以填写一个模型详细信息(例如: - Person),并将其他模型详细信息留空。

如何在我的动作方法中为所有三个模型实现模型验证。我想仅在为每个模型填充模型(非空)时才进行模型验证。

如何根据个人模型是否已填充来实施模型验证?

2 个答案:

答案 0 :(得分:1)

您可以在模型上实施IValidatableObject

public class ViewModel : IValidatableObject
{
    public PersonVM person { get; set; }
    public DepartmentVM department { get; set; }
    public EmploymentVM employment { get; set; }

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        // Add custom logic to validate each object
    }
}

如果您向每个表单虚拟机添加IValidatableObject,那么您可以从ViewModel

中调用每个虚拟机

答案 1 :(得分:0)

您需要的是自定义模型验证。您可以通过继承ActionFilterAttribute, IActionFilter

来创建自定义操作过滤器

http://www.asp.net/mvc/overview/older-versions/hands-on-labs/aspnet-mvc-4-custom-action-filters