Почему Тип Данных.Пароль проверяется только на стороне сервера?
У меня есть модель как
[Required]
[EmailAddress]
[Remote("EmailValidation", "Account", ErrorMessage = "{0} already has an account, please enter a different email address.")]
[Display(Name = "Email")]
public string Email { get; set; }
[Required]
[StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }
[DataType(DataType.Password)]
[Display(Name = "Confirm password")]
[System.ComponentModel.DataAnnotations.Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
public string ConfirmPassword { get; set; }
И форма для регистрации в виде:
<form id="registrationForm">
@Html.AntiForgeryToken()
@Html.ValidationSummary(true, String.Empty, new { @class = "text-danger text-center" })
@Html.HiddenFor(m => m.ForModal, new { @Value = true })
<div class="form-group text-center">
<div class="input-group margin-top-10 margin-bottom-5">
<span class="input-group-addon"><i class="fa fa-user"></i></span>
@Html.TextBoxFor(m => m.Email, new { @class = "form-control", placeholder = "Email", @readonly = "readonly" })
</div>
@Html.ValidationMessageFor(m => m.Email, null, new { @class = "text-danger" })
<div class="input-group margin-top-10 margin-bottom-5">
<span class="input-group-addon"><i class="fa fa-lock"></i></span>
@Html.PasswordFor(m => m.Password, new { @class = "form-control", placeholder = "Password" })
</div>
@Html.ValidationMessageFor(m => m.Password, null, new { @class = "text-danger" })
<div class="input-group margin-top-10 margin-bottom-5">
<span class="input-group-addon"><i class="fa fa-lock"></i></span>
@Html.PasswordFor(m => m.ConfirmPassword, new { @class = "form-control", placeholder = "Confirm Password" })
</div>
@Html.ValidationMessageFor(m => m.ConfirmPassword, null, new { @class = "text-danger" })
</div>
<div class="text-right">
<button type="submit" class="btn-u btn-u-orange btn-u-wide" title="Join">Join</button>
</div>
</form>
Когда я набираю короткий пароль-проверка срабатывает, когда я набираю confirPassword отличается как пароль-проверка срабатывает, но когда я набираю только цифры как 123456
ничего не происходит на стороне клиента, только на стороне сервера, в конце концов я получаю ошибку.
Http://i.imgur.com/jY8bymy.png (ссылка на скриншот)
Почему я могу получить тип данных проверки.Пароль на стороне клиента?
Как я ищу о такой проблеме в Интернете, я просто получаю решение, как use Html.PasswordFor or Html.EditorFor instead of Html.TextBoxFor
.
1 ответ:
Атрибут
DataType
не используется для проверки из коробки, он используется в основном для визуализации. Например, если вы используетеEditorFor
для внутренней визуализации свойства, он будет использовать атрибутDataType
, чтобы определить, какой тип входных данных он должен отображать, т. е.<input type="password" ... />
.PasswordFor
в основном делает то же самое, но без необходимости в атрибутеDataType
.Ваша проверка длины работает на стороне клиента, потому что она обрабатывается атрибутом
StringLength
, а неDataType
. Если вы хотите применить определенный тип данных проверка я предлагаю вам посмотреть на использование RegularExpressionAttribute , а также на реализацию собственного пользовательского валидатора.