Страница ASP.NET MVC - поле электронной почты Viewstate for Confirm стирается на странице регистрации в случае сбоя проверки - PullRequest
2 голосов
/ 26 апреля 2010

У меня есть страница регистрации со следующими полями Электронная почта, Подтверждение электронной почты, Пароль и Подтверждение пароля.

Вкл. Регистрация Нажмите кнопку и опубликуйте модель на сервере. Модель будет проверена и, если это электронное письмо уже зарегистрировано, отобразится сообщение об ошибке проверки «Пользователь уже существует. Email ID".

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

Здесь у меня нет поля verify_Email в моей модели.

Есть ли что-то особенное, что необходимо сделать, чтобы сохранить значение «Подтверждение адреса электронной почты» на странице даже в случае сбоя проверки?

Ценю ваши ответы.

Вот мой код:

<% using (Html.BeginForm()) {%>
    <%= Html.ValidationSummary(false) %>

    <fieldset>
    <div class="cssform">

        <p>
            <%= Html.LabelFor(model => model.Email)%><em>*</em>
            <%= Html.TextBoxFor(model => model.Email, new { @class = "required email" })%>
            <%= Html.ValidationMessageFor(model => model.Email)%>
        </p>

        <p>
            <%= Html.Label("Confirm email")%><em>*</em>
            <%= Html.TextBox("confirm_email")%>
            <%= Html.ValidationMessage("confirm_email") %>
        </p>

        <p>
            <%= Html.Label("Password")%><em>*</em>
            <%= Html.Password("Password", null, new { @class = "required" })%>
            <%= Html.ValidationMessage("Password")%><br />
            (Note: Password should be minimum 6 characters)
        </p>

        <p>
            <%= Html.Label("Confirm Password")%><em>*</em>
            <%= Html.Password("confirm_password")%>
            <%= Html.ValidationMessage("confirm_password") %>
        </p><hr />

        <p>Note: Confirmation email will be sent to the email address listed above.</p>
    </fieldset>

<% } %>

Ответы [ 2 ]

3 голосов
/ 26 апреля 2010

Это потому, что она не использует вашу модель.

Все остальные ваши поля используют TextBoxFor, а это не так, поэтому он не подключается автоматически для отправки туда и обратно, предварительно заполняя вашу модель.

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

Вы также можете добавить его значение к ViewData с тем же именем, что и идентификатор элемента управления.

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

Вот почему хорошо иметь отдельную модель представления, которая оборачивает все данные в вашем представлении, а не только то, что вы хотите сохранить в своей БД. Ваше мнение не должно отражать только то, что хочет ваша БД ...

0 голосов
/ 26 апреля 2010

Поскольку свойство не существует в вашей модели, вы можете добавить значение, которое будет сохранено в словаре ModelState, и оно будет автоматически отображаться при повторном отображении формы. Что-то вроде:

ModelState.Add ("verify_email", Request.Form ["verify_email"]);

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