2013-08-05 2 views
2

У меня есть две модели MVCASP.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» или вы сможете использовать «условную проверку». Попробуйте поиграть в нее. – 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

Вы можете реализовать интерфейс IValidatableObject на model2

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

Модель по умолчанию связующее не поддерживает это. Вы должны реализовать свою собственную модель связующего:

  • Создать новый атрибут, DoNotValidateMeAttribute
  • Создать новую модель связующего, что, при выполнении модели связывания, проверяет, если DoNotValidateMeAttribute присутствует, и если нет, делает привязку модели без проверки.

Тогда вы аннотировать модель, как это

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

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

погуглить «Пользовательские модели связующих в ASP.NET MVC» должны вы начали. Имейте в виду, однако, что это, вероятно, окажется нетривиальной задачей.

Смежные вопросы