2017-10-10 9 views
1

検証用の基本的なASP.NET MVCフォームがあります。検証は、ビューモデル内の属性/データ注釈を使用して実装されています。私のウェブサイトは、クライアント側とサーバー側の両方で検証が行われるように設定されています。私は非常に一般的なパターンを信じています。検証エラーのためにフォームがサーバーにポストされていないことを確認します

フォームは通常のポストバックを使用して送信されます。アヤックスは関与していません。

時にはフォームの処理に時間がかかることがあるので、処理が行われている間にスピナーを表示する必要があります。私はjavascriptを使ってスピナーを表示し隠すために必要なコードを実装しました。

jqueryを使用して、フォームが送信されるときにスピナーを表示します。

$('form').submit(function() { 
    showSpinner(); 
}); 

スピナーが表示され、すべてがうまくいくとページがリフレッシュされ、スピナーが消えます。私のhideSpinner()JavaScript関数を呼び出す必要はありません。

フォームに妥当性検査エラーがある場合でも、スピナーは表示されますが、クライアント側の検証ではページの更新が行われないため、ページの更新は行われません。したがって、スピナーは消えません。スピナーが実際に隠されている、このコードを使用して

$('form').bind('invalid-form.validate', function() { 
    hidespinner(); 
}); 

が、また、クライアント側の検証を無効にするように見える:

私は手動でこのようにスピナーを非表示にすることで、これを解決しようとしました!検証メッセージは表示されず、エラーがあってもページが更新されます。

フォームが実際にサーバーに送信されたときにのみスピナーを表示するより良い方法がありますか、またはクライアント側の検証によってフォームがポストされなくなった場合にスピナーを非表示にする方法がありますか?

答えて

2

フォームが.valid()方法

$('form').submit(function() { 
    if($(this).valid()) { 
     showSpinner(); 
    } 
}); 
を使用して有効であるかどうかをテストすることができます
関連する問題