2012-02-21 1 views
2

У меня есть 2 текстовых поля, text1 и text2, на мой взгляд. Мне нужно проверить, введен ли текст1, а затем ввести текст2 и наоборот. Как это может быть достигнуто в пользовательской проверке в модели представления?asp.net mvc validation on 2 поля - нужно существовать, если другие введены

спасибо.

ответ

8

Вы можете использовать реализовать IValidatableObject (из System.ComponentModel.DataAnnotations пространства имен) для проверки на стороне сервера на ваш взгляд Model:

public class AClass : IValidatableObject 
    { 
     public int Id { get; set; } 
     public string Name { get; set; } 
     public string SecondName { get; set; } 
     public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) 
     { 
      if((!string.IsNullOrEmpty(Name) && string.IsNullOrEmpty(SecondName)) || (string.IsNullOrEmpty(Name) && !string.IsNullOrEmpty(SecondName))) 
       yield return new ValidationResult("Name and Second Name should be either filled, or null",new[] {"Name","SecondName"}); 
     } 
    } 

Теперь сделать конечно, если установлены оба параметра Name и SecondName, или null, то модель действительна, иначе это не так.

+0

FYI, я рекомендую не возвращать поля в результате проверки при использовании сводки валидации. Если вы вернете оба поля в результате проверки, резюме проверки будет содержать два сообщения вместо ожидаемого единственного сообщения. –

+0

Можете ли вы включить некоторый код для того, как это можно было бы использовать для аннотирования свойств класса? – niico

0

Вы можете использовать JQuery, что-то вроде этого:

$("input[x2]").hide(); 
    $("input[x1]").keypress(function() { 
      var textValue = ("input[x1]").val(); 
     if(textValue) 
         $("input[x2]").show(); 
     }) 
0

Если вы хотите использовать аннотацию данные валидатор и проверки атрибутов вашей модели, вы должны смотреть на это: «attribute dependent on another field»