Проверка MVC не работает должным образом - PullRequest
0 голосов
/ 24 марта 2012

не уверен, стоит ли ожидать этого, но для меня это стало неожиданностью ..

Я строго печатаю представление с RegistrationViewModel, но когда я пытаюсь отправить форму, проверка неверно проверяется в 2 местах.

  1. Поле электронной почты не выдает ошибку проверки при вводе «Тест».
  2. Валидатор паролей говорит, что пароли не совпадают, когда они совпадают.

Кто-нибудь знает, почему это происходит?

Класс ViewModel:

 public class RegistrationViewModel
{
    public RegisterModel RegistrationData { get; set; }
    ...     
}

Атрибуты проверки находятся в свойствах класса RegistrationData:

public class RegisterModel
{
    [Required]
    [Display(Name = "User name")]
    public string UserName { get; set; }

    [Required]
    [DataType(DataType.EmailAddress)]
    [Display(Name = "Email address")]
    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")]
    [Compare("Password", ErrorMessage = "The Password and Confirmation password do not match.")]
    public string ConfirmPassword { get; set; }

    [Required]
    [Display(Name = "First name")]
    [StringLength(20, ErrorMessage = "First name must be between 2 and 20 characters.", MinimumLength = 2)]
    public string FirstName { get; set; }

    [Required]
    [Display(Name = "Last name")]
    [StringLength(20, ErrorMessage = "Last name must be between 2 and 20 characters.", MinimumLength = 2)]
    public string LastName { get; set; }
}

Вид:

@model PropertyManager_MVC.Areas.Account.ViewModels.RegistrationViewModel
<div class="editor-field">
            @Html.TextBoxFor(m => m.RegistrationData.Email)
            @Html.ValidationMessageFor(m => m.RegistrationData.Email)
        </div>
<div class="editor-label">
            @Html.LabelFor(m => m.RegistrationData.Password)
        </div>
        <div class="editor-field">
            @Html.PasswordFor(m => m.RegistrationData.Password)
            @Html.ValidationMessageFor(m => m.RegistrationData.Password)
        </div>
        <div class="editor-label">
            @Html.LabelFor(m => m.RegistrationData.ConfirmPassword)
        </div>
        <div class="editor-field">
            @Html.PasswordFor(m => m.RegistrationData.ConfirmPassword)
            @Html.ValidationMessageFor(m => m.RegistrationData.ConfirmPassword)
        </div>

1 Ответ

2 голосов
/ 24 марта 2012

Добавьте это Регулярное выражение в Email Property, и оно позаботится об этом.

  [Required]
  [DataType(DataType.EmailAddress)]
  [Display(Name = "Email address")]
  [RegularExpression("^[a-z0-9_\\+-]+(\\.[a-z0-9_\\+-]+)*@[a-z0-9]+(\\.[a-z]{2,4})$", ErrorMessage = "Not a valid email")]
  public string Email { get; set; }

Добавить обязательный атрибут перед полем Подтверждение пароля.

  [Required]
  [DataType(DataType.Password)]
  [Display(Name = "Confirm password")]
  [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
  public string ConfirmPassword { get; set; }

Пример Скотту, чтобы справиться с этим. http://weblogs.asp.net/scottgu/archive/2010/01/15/asp-net-mvc-2-model-validation.aspx

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