Как реализовать модель, чтобы заставить клиентов заполнить хотя бы один из двух входов в ASP.NET MVC - PullRequest
1 голос
/ 19 ноября 2011

Это моя модель:

public class PhoneNumber {

    public long Id { get; set; }
    public string Tel1 { get; set; }
    public string Tel2 { get; set; }
}

Как заставить клиентов в действии создания заполнить хотя бы один телефонный номер (Tel1 или Tel2), я не хочу использовать скрипт клиента или код контроллера, мне просто интересно использовать некоторые атрибуты в приведенной выше модели, например [ Требуется] для достижения этой цели?

Ответы [ 3 ]

4 голосов
/ 19 ноября 2011

Просто измените модель и используйте пользовательский валидатор следующим образом:

public class PhoneNumber : IValidatableObject {

    public long Id { get; set; }
    public string Tel1 { get; set; }
    public string Tel2 { get; set; }


public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) 
{

        var field1 = new[] { "Tel1" };
        var field2 = new[] { "Tel2" };

        if (string.IsNullOrEmpty(Tel1))
            if (String.IsNullOrEmpty(Tel2))
yield return new ValidationResult("At least Fill one of Tel1 or Tel2‏", field1);

        if (string.IsNullOrEmpty(Tel2))
        if (String.IsNullOrEmpty(Tel1))
yield return new ValidationResult("At least Fill one of Tel1 or Tel2", field2);
    }
}
2 голосов
/ 19 ноября 2011

Это похоже на следующий вопрос, на который дан ответ здесь , где предлагается создать пользовательский атрибут.

Ваша модель может быть записана как:

[AtLeastOneRequired("Tel1", "Tel2", ErrorMessage="Please enter at least one value.")]
public class PhoneNumber { 

    public long Id { get; set; } 
    public string Tel1 { get; set; } 
    public string Tel2 { get; set; } 
} 

В описании описывается написание кода JavaScript для проверки на стороне клиента, но это необязательно, если вы хотите использовать только проверку на стороне сервера.

0 голосов
/ 19 ноября 2011

Для этого нет встроенного атрибута проверки, но вы легко можете написать свой собственный. Я не знаю, что вы подразумеваете под кодом на стороне клиента, но невозможно выполнить такой тип проверки на стороне клиента без какого-либо кода на стороне клиента (не уверен, что проверки HTML5 поддерживают этот вид проверки).

Вот пример пошаговой публикации блога для создания пользовательской проверки:

ASP.NET MVC: атрибуты проверки LessThan и GreaterThan

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...