Проверьте только несколько свойств класса модели, используя аннотации данных из консольного приложения в c # - PullRequest
0 голосов
/ 31 декабря 2018

У меня есть класс модели с несколькими свойствами, как показано ниже, и у каждого свойства есть аннотации данных для проверки

Class User{

[Required]
public string First Name{get;set;}

[Required]
public string Last Name {get;set;}

[Required, EmailAddress, MaxLength(256), Display(Name = "Email Address")]
public string Email {get;set;}

[Required, MaxLength(20), DataType(DataType.Password), Display(Name ="Password")]
public string Pasword {get;set;}
}

Теперь в консольном приложении я прошу пользователя дать мне адрес электронной почты и пароль для входа в систему.,Как я могу проверить, если данный адрес электронной почты и пароль соответствуют условиям.Поскольку это логин, я не хочу проверять Имя и Фамилию

var context = new ValidationContext(user);
var results = new List<ValidationResult>();

var isValid = Validator.TryValidateObject(user, context, results, true);

TryValidateObject принимает экземпляр в качестве первого параметра, поэтому, когда я делаю это, он также возвращает мне ошибку для Имени и Фамилии

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

Ответы [ 2 ]

0 голосов
/ 31 декабря 2018

Я бы разделил класс на базовый класс для имени пользователя и пароля и создал бы из него класс для хранения имени пользователя и пароля.

Примерно так:

Class User : AuthUser {

    [Required]
    public string First Name{get;set;}

    [Required]
    public string Last Name {get;set;}

}

Class AuthUser {
    [Required, EmailAddress, MaxLength(256), Display(Name = "Email Address")]
    public string Email {get;set;}

    [Required, MaxLength(20), DataType(DataType.Password), Display(Name ="Password")]
    public string Pasword {get;set;}
}
0 голосов
/ 31 декабря 2018

Если у вас есть другая часть приложения, для которой требуется другой набор или свойства и правила проверки, тогда вам следует использовать совершенно другую модель для этой цели.Таким образом, у вас может быть новая модель, подобная этой:

public class UserCredentials
{
    [Required, EmailAddress, MaxLength(256), Display(Name = "Email Address")]
    public string Email {get;set;}

    [Required, MaxLength(20), DataType(DataType.Password), Display(Name ="Password")]
    public string Password {get;set;}
}

Теперь ваш код, который выглядит примерно так, будет работать:

UserCredentials userCredentials = .... //Get the credentials from somewhere

var context = new ValidationContext(userCredentials);
var results = new List<ValidationResult>();

var isValid = Validator.TryValidateObject(userCredentials, context, results, true);

Кроме того, если вы хотите поделиться этим кодом спользовательский класс, вы можете использовать наследование:

public class User : UserCredentials
{
    [Required]
    public string FirstName{ get; set; }

    [Required]
    public string LastName { get; set; }
}
...