2011-12-20 13 views
0

私のモデルに関連しないいくつかのフィールドを含む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); 
     } 
    } 
関連する問題