#c# #asp.net
Вопрос:
У меня есть форма регистрации с такими полями, как: Электронная почта, имя пользователя, пароль и т. Д. И иметь определенные проверки для всех из них, например, электронная почта должна иметь@, длина имени пользователя должна составлять не менее 5 букв, пароль должен совпадать и т. Д. На данный момент я настроил ответ на сообщение об ошибке, в котором будет показана ошибка, но я хочу показать все ошибки. Как я могу это сделать?
Вот моя модель ответа пользователя:
public class UserManagerResponse
{
public string AccessToken { get; set; }
public string ErrorMessage { get; set; }
public bool IsSuccess { get; set; }
public IEnumerable<Claim> Claims { get; set; }
//public IEnumerable<string> Errors { get; set; } <--- should i use this?
public DateTime? ExpireDate { get; set; }
}
Это то, что происходит, когда пользователи нажимают на кнопку регистрация, чтобы зарегистрироваться для учетной записи:
public async Task<UserManagerResponse> RegisterUserAsync(RegisterRequest model)
{
if (model == null)
throw new NullReferenceException("Register Model is null");
if (model.Password != model.ConfirmPassword)
return new UserManagerResponse
{
ErrorMessage = "The passwords you have entered do not match",
IsSuccess = false,
};
if (model.Password.length < 5)
return new UserManagerResponse
{
ErrorMessage = "Password length must be greater than 5",
IsSuccess = false,
};
}
Если пользователь переходит в модель, что-то вроде… Пароль: «lol1», а затем подтвердите: «lool1»
Я хочу, чтобы мои сообщения об ошибках были такими: Введенные вами пароли не совпадают, длина пароля должна быть больше 5
Как я могу этого достичь?
Спасибо!
Ответ №1:
Ваша проблема в том, что вы возвращаетесь, как только обнаружите первую ошибку, поэтому остальные ваши тесты никогда не будут выполнены — вы можете вернуться только один раз. Что вы можете сделать, так это создать ответ по ходу работы и отправить его только в конце:
public async Task<UserManagerResponse> RegisterUserAsync(RegisterRequest model) {
if (model == null) {
throw new NullReferenceException("Register Model is null");
}
//create error message string and boolean to track errors here
UserManagerResponse response = new UserManagerResponse{
IsSuccess = true,
ErrorMessage = ""
};
if (model.Password != model.ConfirmPassword) {
response.ErrorMessage = "The passwords you have entered do not match. ";
response.IsSuccess = false;
}
if (model.Password.Length < 5) {
response.ErrorMessage = "Password length must be greater than 5. ");
response.IsSuccess = false;
}
//any other tests here built the same way
if (response.isSuccess){
//success functions here
}
return response;
}
Таким образом, ваш результат будет:
Введенные вами пароли не совпадают. Длина пароля должна быть больше 5.
Я бы предложил иметь отдельные строки для каждого сообщения об ошибке, это чище и проще для чтения, особенно если вы получаете их много. Для этого вы должны создать новую строку для каждой добавленной ошибки:
response.ErrorMessage = "The passwords you have entered do not match.n";
И в конце, прежде чем вы вернетесь, очистите дополнительную новую строку:
response.ErrorMessage = response.ErrorMessage.Trim();
Ответ №2:
Проверка модели представления может быть выполнена до того, как будут применены какие-либо методы контроллера, путем украшения модели атрибутами. Кроме того, сложность также проверяется тем, что было настроено в файле startup.cs. Эти ошибки должны автоматически отображаться в представлении, если вы используете стандартные модели
public class RegisterViewModel
{
[Required]
[DataType(DataType.Password)]
public string Password { get; set; }
[Required]
[DataType(DataType.Password)]
[Compare("Password")]
public string ConfirmPassword { get; set; }
}