2017-08-10 6 views
0

MVCのマルチステップフォームを構築しています。 - 連絡先の詳細、車の詳細、車の画像、車の状態。各ステップで、我々はこのようなユーザからのいくつかの自動車関連の詳細を尋ねる:C#MVC:マルチステップフォームの実装

Multi Step Form 私たちは、データベースに各ステップの情報を保存する必要があり、我々は例えば、ステップごとに別々のMVCコントローラを作っています

[HttpGet] 
[Route("contact-details/")] 
public ActionResult ContactDetails() 
{ 
    return View("~/Views/ContactDetails.cshtml"); 
} 

[HttpPost] 
[Route("contact-details/")] 
public ActionResult ContactDetails(ListingDetails listingDetails) 
{ 
    if (ModelState.IsValid) 
     //extract ContactDetails from ListingDetails and save in db 
     return View("~/Views/CarDetails.cshtml"); 
    return View("~/Views/ContactDetails.cshtml"); 
} 

[HttpPost] 
[Route("car-details/")] 
public ActionResult CorDetails(ListingDetails listingDetails) 
{ 
    if (ModelState.IsValid) 
     //extract CorDetails from ListingDetails and save in db 
     return View("~/Views/CarImages.cshtml"); 
    return View("~/Views/CarDetails.cshtml"); 
} 

[HttpPost] 
[Route("car-images/")] 
public ActionResult CarImages(ListingDetails listingDetails) 
{ 
    if (ModelState.IsValid) 
     //extract CarImages from ListingDetails and save in db 
     return View("~/Views/CarConditions.cshtml"); 
    return View("~/Views/CarImages.cshtml"); 
} 

[HttpPost] 
[Route("car-condition/")] 
public ActionResult CarCondition(ListingDetails listingDetails) 
{ 
    if (ModelState.IsValid) 
     //extract CarCondition from ListingDetails and save in db 
     return View("~/Views/ThankYou.cshtml"); 
    return View("~/Views/CarConditions.cshtml"); 
} 

ListingDetailsは、構造は次の通りです:連絡先、詳細フォームの次のクリックで

class ListingDetails 
{ 
    public ContactDetails contactDetails; 
    public CarDetails carDetails; 
    public CarImages carImages; 
    public CarConditions carConditions; 
} 

を、我々は唯一のSTEP1データを送信します。 Car-detailsフォームを次にクリックすると、step1 + step2データが送信されます。 Car-imagesフォームを次にクリックすると、step1 + step2 + step3データが送信されます。 車条件フォームを次にクリックすると、step1 + step2 + step3 + step4のデータが送信されます。

私たちはすべての前のステップデータを次のクリックとともに送信しています。これはトップナビゲーションのためです。たとえば、ユーザーはstep1を入力し、next => step2を入力し、nextをクリックしてstep3からstep1に戻り、何かを編集します。ここで、トップのナビゲーションからステップ3に戻ります。したがって、この場合、各リクエストごとに完全なデータを送信する必要があります。

私たちはどうにかして、各ステップで以前のステップデータをすべて送信することはできませんか?

これは、MVCで複数ステップのフォームを実装する正しい方法ですか?

+0

詳細を保存するために1つのテーブルを使用していますか、seprate tableを持っている各ステップごとに使用していますか? あなたの答えを見つけることができなかった場合は、[this](http://www.binaryintellect.net/articles/9a5fe277-6e7e-43e5-8408-a28ff5be7801.aspx)に従ってください。あなたのプロジェクトの違いは、セッション –

+0

を使用してデータベースにデータを保存したいということです。各ステップのデータを新しいテーブルに保存する必要があります。 – maverick

+0

@AliZeinali:これはセッションストレージを使用しないので役に立たない形の長さが長すぎるため – maverick

答えて

-1

最終ステップでサーバーにデータを送信する方がよいでしょう。その前に、ビューはボタンのクリックまたはタブのクリックを切り替えます。

1

ソリューション1

私はあなたが単にデータベース内の各ステップを保存し、3

例のステップでSTEP1とSTEP2を送るのを避けることができ、これを見る方法:

ステップ1:記入詳細、データベースに保存してguidを返します。 このguidをinquery全体の参照として使用します。

Step2は、指定されたguidを使用してdbに保存されましたが、inqueryのどの部分(たとえば車)を示しているかを示すenumも保存されました。

あなたが一意のGUIDを持っていて、2番目のパラメータとして列挙型を送信するだけなので、あなたが納得しているinqueryを知っていれば、そのステップのdesieredデータが返されます。ログインしていない場合は、ユーザーがブラウザを終了して終了する前に戻ってくることなく、dbクリーンアップのスケジュールされたタスクを実行すると、ある種のdbクリーンアップを行うことをお勧めします。ログインしても、これは良いことですが、ユーザーは以前の状態に戻ることができます。あなたはAJAX要求を使用して、あなたがこの中を救うことができるページをリロードされていない場合は、ブラウザにデータを保存することができ 上記に従うことをしたくない何らかの理由

ソリューション2

の場合各次/バッククリック後にデータがあるかどうかをチェックし、スクリプトを介してデータを提示する。この方法は、ページがリロードされ、スクリプトが重い場合にデータが失われる可能性があるため、お勧めしません。あなたはまた、与えられた要求のためにそのhere 作品についての詳細情報をMVC TempDataをを使用cuuldし、あなたのケースであなたは常にfinalysingに要求それまでは来て間 データを割り当てる必要があります

ソリューション3

ステップ。

私は解決策1をお勧めしますが、他人と実験したい場合は、私に助けてもらいたいと思います。