在MVC表单上保留非模型信息

时间:2011-12-20 03:19:49

标签: asp.net-mvc credit-card asp.net-mvc-2-validation

我有一个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>

然后,在我的控制器中,我在form-submit上做了类似的事情:

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

1 个答案:

答案 0 :(得分: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);
       }
    }