Сохранять информацию о не модели в форме 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);
}
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);
}
}