2013-08-05 77 views
2

我有两个MVC模型ASP.net MVC不验证子模型

public class Model1 
{ 
    [Required] 
    public int Id {get;set;} 
    [Required] 
    public string Name {get;set;} 
} 

public class Model2 
{ 
    public Model1 ValidateThis {get;set;} 
    public Model1 DoNotValidateThis {get;set;} 
} 

在回传我填这两个属性ValidateThis和DoNotValidateThis。我想验证只发生在ValidateThis属性上。

+0

你想要什么样的验证? – PostureOfLearning

+1

您必须为'DoNotValidateThis'创建单独的模型,或者您可以使用“条件验证”。尝试使用Google搜索。 – user1477388

回答

1

随着多一点研究,我选择了适合我的下一个解决方案。在控制器中,我把下一个代码用于验证。

 var results = new List<ValidationResult>(); 
     bool isValid = Validator.TryValidateObject(
     model2obj.ValidateThis, 
     new ValidationContext(model2obj.ValidateThis, null, null), results,true); 

     ModelState.Clear(); 

     foreach (ValidationResult validationResult in results) 
     { 
      ModelState.AddModelError("ValidateThis." + validationResult.MemberNames.First(), validationResult.ErrorMessage); 
     } 
0

您可以实现在模型2

public class Model2 : IValidatableObject 
{ 
    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) 
    { 
     .... 
    } 
} 
1

IValidatableObject接口的默认模式粘结剂不支持此。你将不得不实现自己的模型绑定:

  • 创建一个新的属性,DoNotValidateMeAttribute
  • 创建一个新的模型绑定的是,在做模型绑定时,会检查,看看是否DoNotValidateMeAttribute存在,如果没有,模型绑定没有验证。

那么你会标注模型这样

public class Model2 
{ 
    public Model1 ValidateThis {get;set;} 

    [DoNotValidateMe] 
    public Model1 DoNotValidateThis {get;set;} 
} 

谷歌搜索“在ASP.NET MVC自定义模型粘合剂”应该让你开始。但请注意,这可能会变成一项不重要的任务。