私はasp.net MVC 3を使用しています:
入力フィールドがGETリクエスト中に動的に生成されるビューがあります(データベースから取得されます)。POST 中に検証が失敗した場合は、フィールドを再表示して再度取得する必要があります。冗長なデータベース アクセスを回避する方法はありますか。つまり、GET 要求と POST 要求の間でデータを共有する方法はありますか?
私はasp.net MVC 3を使用しています:
入力フィールドがGETリクエスト中に動的に生成されるビューがあります(データベースから取得されます)。POST 中に検証が失敗した場合は、フィールドを再表示して再度取得する必要があります。冗長なデータベース アクセスを回避する方法はありますか。つまり、GET 要求と POST 要求の間でデータを共有する方法はありますか?
TempDataやSessionなどにデータを保存するなど、これを処理する方法があります...しかし、私はあなたがそのようにすべきではないと思います。常にデータ アクセス レイヤーを再クエリして取得する必要があります。これは、常に db テーブルをクエリするという意味ではありません。データ アクセス レイヤーは、キャッシュからデータを取得したり、テーブルに対してクエリを実行したりできます。
バックグラウンドで、TempData は Session を使用して値を永続化します。TempData の値は、読み取られるか、セッションがタイムアウトするまで保持されます。このように TempData を永続化すると、リダイレクトなどのシナリオが可能になります。これは、TempData の値が単一の要求を超えて使用できるためです。
直接ではありませんが、そうです。
フォームを投稿するときに、すべてのデータをサーバーに送り返し、そのデータをモデルに送信する場合、モデルには、フィールドに入力するために必要なすべてのデータが含まれます。
jsonデータを受信するためのajaxを介した投稿があり、ajaxから結果を取得するときは、変更されたフィールドのみにデータを入力します。
ただし、数秒以上の特に面倒なクエリについて話しているのでない限り、再クエリはそれほど大きな問題ではないと思います。
ああ、セッションやキャッシュにデータを保存しないでください。単一の投稿でRAMを詰まらせる理由はありません。これにより、セッションキーを誤って再利用した場合に、後で潜在的な問題が発生する可能性があります。
あなたが望むのは「遅延読み込み」だと思います。
static
データベースクエリが発生したときにその結果を格納する変数を (データベースクエリを実行するクラスで)作成しますが、最初はnull
. static
次に、この変数が有効かどうかを確認する getter メソッドを作成しますnull
。の場合null
は、DB クエリを実行して結果を保存します。それ以外の場合は、static
var の内容を返します。次に、常にそのゲッターを使用すると、準備が整います。
特定の衒学的な人々static
がこのような変数の使用にうんざりしていることは知っています...しかし、それはうまく機能し、大騒ぎすることはほとんどありません。