検証用の基本的なASP.NET MVCフォームがあります。検証は、ビューモデル内の属性/データ注釈を使用して実装されています。私のウェブサイトは、クライアント側とサーバー側の両方で検証が行われるように設定されています。私は非常に一般的なパターンを信じています。検証エラーのためにフォームがサーバーにポストされていないことを確認します
フォームは通常のポストバックを使用して送信されます。アヤックスは関与していません。
時にはフォームの処理に時間がかかることがあるので、処理が行われている間にスピナーを表示する必要があります。私はjavascriptを使ってスピナーを表示し隠すために必要なコードを実装しました。
jqueryを使用して、フォームが送信されるときにスピナーを表示します。
$('form').submit(function() {
showSpinner();
});
スピナーが表示され、すべてがうまくいくとページがリフレッシュされ、スピナーが消えます。私のhideSpinner()JavaScript関数を呼び出す必要はありません。
フォームに妥当性検査エラーがある場合でも、スピナーは表示されますが、クライアント側の検証ではページの更新が行われないため、ページの更新は行われません。したがって、スピナーは消えません。スピナーが実際に隠されている、このコードを使用して
$('form').bind('invalid-form.validate', function() {
hidespinner();
});
が、また、クライアント側の検証を無効にするように見える:
私は手動でこのようにスピナーを非表示にすることで、これを解決しようとしました!検証メッセージは表示されず、エラーがあってもページが更新されます。
フォームが実際にサーバーに送信されたときにのみスピナーを表示するより良い方法がありますか、またはクライアント側の検証によってフォームがポストされなくなった場合にスピナーを非表示にする方法がありますか?