ウィザードを作成しており、作成したリストを伝達する必要があります。リストは私の連絡先モデルです。これをフォームに入れる必要があるため、最後のステップでコントローラーにポストバックするときに、ウィザード モデルの一部として連絡先のリストを取得できます (現在は null を返すだけです)。他の単純なフォーム オブジェクトについては、モデル内のデータを保持するために HiddenFor を使用します。非表示の for は単なるテキスト ボックスであり、複雑なオブジェクトがあるため、これは機能しません。
DropDownListFor を作成し、非表示の div でラップすることを検討しました。これは単なるパッチワークであり、DropDownListFor が別のオブジェクト タイプを受け入れるようにするには、実際には少し作業が必要です (それが機能する場合)。
リストを Session["Contacts"] に保存することを検討しましたが、それは適切な MVC の方法とは思えません。誰にもより良い提案がありますか?
ありがとう、TJ
- アップデート -
merekel への対応として、問題が発生している場所を明確にするために詳細を追加しています。このリストはユーザーによって変更されず、フォームには表示されません。ウィザードの手順の 1 つでリストを作成し、このようにモデルに保存します。
モデルを見る
public class WizardViewModel
{
//...
public List<Contact> ContactList { get; set; }
//...
}
コントローラーコード
//Step 4 in the wizard
model.ContactList = CALL FUNCTION THAT CREATES LIST BASED ON FORM SELECTIONS
//other calculations needed for step 5
//Save Contacts for later
Session["Contacts"] = model.ContactList;
//Step 5 in the wizard
//Readd the contacts to the model
model.ContactList = (List<Contact>)Session["Contacts"];
//Save the model to pass to the report page
//My report viewer is on an ASPX page so I am passing all the data here with a session
Session["ReportModel"] = model;
セッションの保存は期待どおりに機能します。MVCでページからページへデータを保存するためにセッションを使用する必要があるようには思えません。MVC から ASPX に移行するときに必要なので、Session["ReportModel"] のみ Session["Contacts"] については心配ありません。ご提案ありがとうございます。