ここで以前の質問をしましたが、その一部はそれ自体が主題全体のようです。
コントローラー呼び出し間でファイル データを保持しようとしています。
シナリオは次のとおりです。ユーザーが、データベースに送信するエントリを含むファイルをアップロードします。ファイルに警告とエラーがある場合、それらは検証ページにリダイレクトされます。警告やエラーがない場合、ファイルは直接処理されます。
ユーザーが警告を受け取ってもエラーが発生しない場合 (つまり、テキスト フィールドが長すぎて切り捨てられる場合)、ユーザーはファイルをインポートできます。ファイルのアップロードとデータベースへの送信の間には 2 つの別個の画面があるため、ファイル データを保持する必要があります。
私はこれに似た質問をたくさん見ましたが、どれも関連性のある回答を持っていないようです (したがって、同様の質問にこの正確な問題に対する回答がない場合は、この質問を重複としてマークしないでください)。
私の最初のアイデアは、アップロードされたファイル名 + GUID を使用してファイルを保存し、そのファイル名をセッション状態に保存することでしたが、以前の質問で得た回答はすべて、これがひどい解決策であるとかなり断言していました。
他の同様の質問に対して私が見つけた解決策:
- ファイルを再アップロードします (ひどい解決策)
- ビューバッグを使用してファイル名をビューに送信し、2 番目のコントローラーに送り返す (正しく聞こえません)
- ビューモデルにファイルの場所を保存してビューに送信し、2番目のコントローラーで再度取得します(これも正しく聞こえません)
- ファイルの場所をセッションまたは一時データに保存します (一般的に好ましくない意見を受け取ります)。
私は調査を行いましたが、これについて最善の方法を見つけることができません。誰か助けてくれませんか?別の質問がこれに答えると思われる場合は、すでにかなりの検索を行っているため、これを重複として報告するのではなく、回答として私に送信してください.
ありがとう、サミュエル・デイビス
編集:私のユーザーはセッションを利用できます。私が考えることができる別の解決策は、セッションIDに含まれるGUIDにハードコードされた文字列を追加することです. 「MyImporter-xxxx.xxxx.xxxx.xxxx.csv」。このように、「MyImporter」はプライベート定数文字列にすることができ、コントローラーは識別子を永続化する必要がありません。この方法の欠点については確信が持てませんが、MVC を初めて使用するので、思いもよらなかったケースもあるはずです。