Сохранять информацию, не относящуюся к модели, в форме MVC

У меня есть форма MVC, которая содержит некоторые поля, не связанные с моей моделью. Эти поля содержат введенную пользователем информацию о кредитной карте. Как только пользователь заполняет форму и нажимает «Продолжить», я выполняю некоторую проверку кредитной карты в своем контроллере. Если транзакция по кредитной карте прошла успешно, я обращаю внимание на другие поля, связанные с моделью, и перенаправляю пользователя на страницу завершения/подтверждения. Это прекрасно работает.

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

Любая помощь приветствуется. Вот пара моих элементов управления формой:

<tr>
    <td>ccFieldA:</td>
    <td>
        <%= Html.TextBox("ccFieldA") %>
    </td>
    <td>
        <label id="ccFieldAError" runat="server"></label>
        <%= Html.Hidden("hiddenFieldA") %>
    </td>
</tr>
<tr>
    <td>ccFieldB:</td>
    <td><%= Html.TextBox("ccFieldB") %></td>
    <td>
        <label id="ccFieldBError" runat="server"></label>
        <%= Html.Hidden("hiddenFieldB") %>
    </td>
</tr>

Затем в моем контроллере я делаю что-то вроде этого при отправке формы:

if (CreditCardPassesValidation()) {
    return RedirectToAction("NextPage", new { id = myID });
}
else {
    return View(ThisSamePage);
}

person WEFX    schedule 20.12.2011    source источник


Ответы (1)


В основном вам нужно создать модель представления для вашей формы. И в действии, если транзакция не прошла успешно, вы можете снова передать эту модель представления обратно в представление. И в представлении вам нужно использовать помощники HTML, подобные этому,

<%= Html.TextBoxFor(model=>model.ccFieldA) %>

и в действии вы можете вернуть модель представления следующим образом,

public ActionResult YourAction(YourViewModel model)
    {
       if (CreditCardPassesValidation()) {
            return RedirectToAction("NextPage", new { id = myID });
       }
       else {
             return View(ThisSamePage,model);
       }
    }
person Jayantha Lal Sirisena    schedule 20.12.2011