1

やあ、

いくつかの入力フィールドを含むビューがあります。これらのフィールドのいくつかは通常のファイル入力です。このビューフォームを送信すると、ファイルは一時フォルダに保存されます。ただし、サービス側で検出された検証の問題がある場合は、同じビューが返されます(更新用)。問題は、ファイル入力が再度入力されないこと(セキュリティ)であり、代わりに、ビュークラスを拡張して、保存されたファイルの小さなサムネイルを表示し、削除できるようにする必要があります(代わりに別のファイルをアップロードできるようにするため)。

ユーザーがもう一度送信を押すと、ビュークラスには保存されたファイルに関するデータが含まれなくなります。このためのベストプラクティスはどのようになっていますか?

私自身の考えは次のいずれかです:

  1. 非表示のフィールドを使用しますが、保存するクラスが複雑な場合、これは複雑になり、安全性も低下します。
  2. セッションを使用してデータを保存します。これが良い解決策か悪い解決策かわかりませんか?
  3. このすべてのデータが一時的に保存される単一のクラス(キャッシュなど)を作成します。ASP.NETには、キャッシュが解放されるまでの時間を設定できるキャッシュがありました。これは同じように機能します。
  4. 広告を一時的なものとしてデータベースに保存します。これは、ビューが返されるときに、一時的な広告の編集ではなく、実際には作成された広告の編集であることを意味します(データベースにはありません)。問題は、ユーザーが最初のサービス検証後に中止した場合、データベースに完全ではない広告が表示されることである可能性があります。もう1つのマイナス点は、広告が使用されていない場合でも、IDカウント(ID)が増加することです。そして、このソリューションの最後の問題は、広告テーブルに不完全な広告が含まれることです。

お願いのアドバイス

私の解決策: リクエスト間でデータを保持するためにSystem.Web.Cacheを使用することになりました。広告が作成されて承認されると、キャッシュから削除され、データベースに追加されます。

4

2 に答える 2

2

MVCのTempData機能を利用できます。基本的TempDataに、次のリクエストまでデータをキャッシュするセッションベースのストアです。リクエストごとに既存のファイルのリストを保存しTempData、フォームを処理するたびにそれを保持する (そして後で読み取る) ことはできますか?

于 2011-02-01T09:18:27.637 に答える
0

jquery フォーム プラグインを使用してこの問題を解決しました: http://jquery.malsup.com/form/

このようにして、ファイルはajax経由で送信され(プラグインによって内部的にiframeを使用して)、JsonResultが返されます(つまり、サーバー側の検証などを実行できます)。ページ上のフォームは事実上変更されず、再送信できます。ファイルを再度選択します。

注: プラグインを使用して MVC で JsonResult を返す場合は、JsonResult を「textarea」タグでラップする必要があります。JsonResult をラップし、testarea の異常を整理するクラスについては、この投稿を参照してください: http://aspzone.com/tech/jquery-file-upload-in-asp-net-mvc-without-using-flash/

于 2011-02-01T09:20:01.233 に答える