Пользовательская модель ASP.NET MVC 1 на странице регистрации, подтверждение пароля не заполняется - PullRequest
0 голосов
/ 22 декабря 2009

Я поиграл с сайтом MVC 1 по умолчанию, добавив некоторые поля в раздел регистрации, которые используются для создания вторичного объекта в базе данных во время регистрации.

Я создал модель представления, включая свойства username, email, password и passwordConfirm, а также некоторые другие. Затем я добавил тип к атрибуту наследования на странице регистра и в контроллере добавил новый экземпляр модели в свойство ViewData.Model.

Проблема в том, что когда я отправляю модель обратно на сервер, свойство passwordConfirm всегда равно null, независимо от того, что я ввожу. Свойство пароля заполнено правильно, как и все остальные свойства.

Есть ли что-то особенное, что нужно сделать, чтобы получить значение passwordConfirm для передачи?

Вот соответствующий код:

RegistrationViewModel.cs:

public class RegistrationViewModel
{
    public string UserName { get; set; }
    public string Password { get; set; }
    public string PasswordConfirm { get; set; }
    public string Email { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string DisplayName { get; set; }
    public string Address1 { get; set; }
    public string Address2 { get; set; }
    public string City { get; set; }
    public string State { get; set; }
    public string Zip { get; set; }
    public string HomePhone { get; set; }
    public string CellPhone { get; set; }
    public string OtherPhone { get; set; }
    public string Twitter { get; set; }
    public string Bio { get; set; }
    public string DOB { get; set; }
}

AccountController.cs:

public ActionResult Register()
    {
        ViewData.Model = new RegistrationViewModel();
        ViewData["PasswordLength"] = MembershipService.MinPasswordLength;

        return View();
    }

Register.aspx:

<% using (Html.BeginForm()) { %>
    <div>
        <fieldset>
            <legend>Account Information</legend>
            <p>
                <label for="firstname">First Name:</label>
                <%= Html.TextBox("firstname", Model.FirstName) %>
                <%= Html.ValidationMessage("firstname") %>
            </p>
            <p>
                <label for="lastname">Last Name:</label>
                <%= Html.TextBox("lastname", Model.LastName) %>
                <%= Html.ValidationMessage("lastname") %>
            </p>
            <p>
                <label for="username">Username:</label>
                <%= Html.TextBox("username", Model.UserName) %>
                <%= Html.ValidationMessage("username") %>
            </p>
            <p>
                <label for="email">Email:</label>
                <%= Html.TextBox("email", Model.Email) %>
                <%= Html.ValidationMessage("email") %>
            </p>
            <p>
                <label for="zipcode">Zip Code:</label>
                <%= Html.TextBox("zip", Model.Zip) %>
                <%= Html.ValidationMessage("zip") %>
            </p>
            <p>
                <label for="password">Password:</label>
                <%= Html.Password("password", Model.Password) %>
                <%= Html.ValidationMessage("password") %>
            </p>
            <p>
                <label for="confirmPassword">Confirm password:</label>
                <%= Html.Password("confirmPassword",Model.PasswordConfirm) %>
                <%= Html.ValidationMessage("confirmPassword") %>
            </p>
            <p>
                <input type="submit" value="Register" />
            </p>
        </fieldset>
    </div>
<% } %>

Ответы [ 3 ]

2 голосов
/ 22 декабря 2009

Вы назвали ввод confirmPassword, но свойство названо PasswordConfirm. С этим нужно согласиться. Измените ваш ввод на passwordConfirm, и он должен быть правильно привязан.

2 голосов
/ 22 декабря 2009

Поведение привязки модели по умолчанию заключается в гидратации модели представления путем сопоставления имен элементов HTML для просмотра имен свойств модели. Как указывалось в предыдущем ответе, элемент ввода, который вы используете для ввода пароля подтверждения, называется «verifyPassword», а свойство модели представления «PasswordConfirm». Если вы обновите свой код, чтобы эти имена совпадали, вы должны увидеть строку подтверждения пароля в модели.

1 голос
/ 22 декабря 2009

Это confirmPassword в представлении и PasswordConfirm в модели. Он пытается сериализовать поле с именем verifyPassword для ConfirmPassword в модели, которого там нет

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