MVCのマルチステップフォームを構築しています。 - 連絡先の詳細、車の詳細、車の画像、車の状態。各ステップで、我々はこのようなユーザからのいくつかの自動車関連の詳細を尋ねる:C#MVC:マルチステップフォームの実装
私たちは、データベースに各ステップの情報を保存する必要があり、我々は例えば、ステップごとに別々の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で複数ステップのフォームを実装する正しい方法ですか?
詳細を保存するために1つのテーブルを使用していますか、seprate tableを持っている各ステップごとに使用していますか? あなたの答えを見つけることができなかった場合は、[this](http://www.binaryintellect.net/articles/9a5fe277-6e7e-43e5-8408-a28ff5be7801.aspx)に従ってください。あなたのプロジェクトの違いは、セッション –
を使用してデータベースにデータを保存したいということです。各ステップのデータを新しいテーブルに保存する必要があります。 – maverick
@AliZeinali:これはセッションストレージを使用しないので役に立たない形の長さが長すぎるため – maverick