ASP.NET MVCのフォームエントリを処理するために、Scott GuのPreview 5ブログ投稿で詳述されているAcceptVerbs
メソッドを使用しています。
したがって、TempData
を使用する必要はありません。そうは言っても、このプロセスに「確認」ステップを追加する必要があり、TempData
を使用する必要があるようです。
何らかの理由で、TempData
を使用することに嫌悪感を抱いています。
これは妥当な懸念事項なのでしょうか、それともそれを補っているのでしょうか?
一時データは、ユーザーに通知するための簡単なメカニズムであると考えています。彼らが最近やったことを思い出させるのは素晴らしいことですが、私はそれを何らかのユーザープロセスの必須ステップにすることもためらっています。その理由は、彼らがページを更新すると、それはなくなると信じています。まあ、私はそれが本当にどれほど信頼性があるかを明確に定義していないので、それを使うことをためらっていると思います。
問題は、確認ステップの前にアクションを別のページにリダイレクトしていることだと思います。代わりに、最初に送信した後、確認ダイアログを生成するために十分な処理を行ってから、確認の質問を含む元のページを返すことができますか?検証の方法に似ていますが、確認ルールが確認ステップが実行されたかどうかを確認します(他の検証がパスするまで確認UIは非表示になります)。
TempDataに嫌悪感を抱く必要はありません...しかし、正しく使用しなかった場合、それは確かに質の悪いデザインを示している可能性があります。 RESTful URLを使用している場合、TempDataは、POSTアクションからGETアクションにメッセージを転送するためのベストプラクティスです。これを考慮してください。
URL Products/Newにフォームがあります。フォームは製品を作成/作成し、フォームを検証して製品を作成します。成功すると、コントローラーはURL Products/1にリダイレクトし、エラーが発生するとエラーメッセージを表示するためにproducts/Newにリダイレクトします。
Products/1は、製品の単なる標準のGETアクションですが、挿入が成功したことを示すメッセージを表示したいと思います。 TempDataはこれに最適です。 Post ControllerのTempDataにメッセージを追加し、ビューと完了にifロジックを追加します。
失敗時には、formCollectionに入力された値とエラーメッセージのコレクションをPost ActionのTempDataに追加し、最初のAction Prodcuts/Newにリダイレクトしました。ビューにロジックを追加して、以前に入力した値とエラーメッセージをフォーム入力に入力しました。素敵できれいなようです!
TempDataを使用する前にheすることをお勧めします。 TempDataはセッションに保存され、次の場合に意味があります。
サイトに高可用性が必要な場合、セッション状態の適用に関する追加の考慮事項がありますが、これらはすべて解決可能な問題です。
最初にTempData ["model"]をチェックして返すGetModelメソッドがあります。それ以外の場合、GetModelはデータベースから適切なデータをロードします。
同じモデルデータを必要とする別のビューを返す必要があるアクションがある場合、データベースからの余分な負荷を節約します。
MVC3で セッションレスコントローラー を確認してください。セッションを使用すると、単一のユーザーのリクエストの並列実行が妨げられるため、パフォーマンスが低下することが判明しました。
Tempdataはデフォルトでセッションを使用するため、この機能を使用することはできません。 tempdataにcookieを使用するように切り替えることはできますが、それは少し厄介です(少なくとも私にとっては)。ただし、ビューステートよりはまだきれいなので、それほど大きな問題ではないかもしれません。
これはViewDataを使用するようなもので、おそらくセキュリティ上のリスクではありません。しかし、私はむしろTempDataよりViewDataを使用します。比較のためにここをチェックしてください: http://www.squaredroot.com/2007/12/20/mvc-viewdata-vs-tempdata/
設計に応じて、ユーザー/バスケットまたは必要なものをデータベースのtempdataに常に保存し、完了したかどうかを示す「IsReady」フィールドを用意して、後で利用できるように拡張可能にすることができます。人々は自分のブラウザを閉じることができることを心に留めてください。
なぜあなたはそのような嫌悪感を持っていますか?このことは単純に仕事をして、うまくやることです:)
強く型付けされていないので気に入らない場合は、常に強く型付けされたインターフェイスを提供するラッパーを作成できます。
すべての良い答えは、メッセージを渡すためにこれを見たことがありますか。
TempDataとSessionは、ほとんどのセッションがメモリに保存されるため、RESTfulアーキテクチャの最良のアイデアではありません。したがって、サーバーファームを使用する場合、ユーザーセッションは1つのサーバーに存在し、次の要求は別のサーバーに送信できます。
ここでは、メッセージを渡すためのTempDataのこの使用法について説明します。
http://jameschambers.com/2014/06/day-14-bootstrap-alerts-and-mvc-framework-tempdata/
Mabyeこれは、別のページアラートへのリダイレクトにのみ使用される場合、クエリ文字列アプローチを使用するように適応できます。