2013-08-05 76 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自定義模型粘合劑」應該讓你開始。但請注意,這可能會變成一項不重要的任務。