2

特定のフィールドのデータベース内の既存の値をチェックするようにリモート検証が設定されたデータ入力フォームがあります。

何が起こるかです:

  1. 作成ページ(データ入力フォーム)に移動します。フィールドに値Xを入力します。

  2. フィールドはフォーカスを失います。リモート検証が呼び出されます。Fiddlerが呼び出しを表示します。

  3. [保存]をクリックします。レコードが保存されます。ページがインデックスページに切り替わります。

  4. もう一度[ページの作成]に移動します。フィールドに値Yをもう一度入力します。

  5. フィールドはフォーカスを失います。リモート検証が呼び出されます(Fiddlerごと)。

  6. [保存]をクリックします。レコードが保存されます。ページがインデックスページに切り替わります。

  7. [ページをもう一度作成]に移動し、フィールドにX(もう一度)を入力します。

  8. フィールドはフォーカスを失います。何も起こりません。リモート検証の呼び出しはありません(Fiddlerごと)。

  9. [保存]をクリックします。リモート検証の呼び出しはありません。ページはレコードを保存しようとしますが、データベースはそれを返します。

これは、[作成]ページが、フィールドの以前の値もXであったことを記憶していて、その間に他のページにアクセスしたにもかかわらず、変更されていないため再検証されていないかのようです。

モデルを作成ビューに渡していない:そのフィールドに変更されている(または変更されていない)以前の値があるという考えがどこで得られているのか想像できません。

私の知る限り、OutputCache使用されていません。重要な場合は、IE8を使用しています。

4

1 に答える 1

4

OK、私はそれを理解したと思います。OutputCacheを使用して結果をキャッシュできないだけでなく、検証結果をキャッシュしないように明示的に指定する必要があります。説明と例については、ここを参照してください。

ETA:発生する可能性のあるもう1つのことは、最初のリモート検証呼び出しが失敗した場合(たとえば、500エラーを返す場合)、再度呼び出されないことです。このため、検証ルーチンがnullデータで呼び出されることが予想される場合(フィールドがまだ入力されていないため)、パラメーターをnull可能にして、検証コードでそれを考慮する必要があります。

于 2011-11-08T18:33:35.540 に答える