2010-12-21 2 views
2

こんにちは、jqueryでajaxを使ってフォームの投稿をしています。mvcクライアント側のバリデーションが壊れている今、ajax jqueryをやっています。

HERESに私のjQuery:

$("#submit").click(function (e) { 
      e.preventDefault(); 
      $.post("Account/LogOn", 
        $(this.form).serialize(), 
        function (data) { 
         if (data.redirect) { 
          // data.redirect contains the string URL to redirect to 
          window.location.href = data.redirect; 
         } 
         else { 
          // data.form contains the HTML for the replacement form 
          $("#error").replaceWith(data.error); 
         } 
        }, 
        'json' 
      ); 
      return false; 
     }); 

予想通り、この作品は、しかしに建てMVCの検証は、もはや機能していませんか? (省略され、フォームが送信された場合、エラーメッセージでユーザー名必須/パスワードは必要ありません)。

クライアントの検証がもう機能しない理由はありますか?

おかげ

+0

私が最初に推測するのは、無効なマークアップに置き換えられたHTMLです。既存のJavaScriptの検証が機能しなくなる私は、AJAXリクエストが何を返すのかをもっと見る必要があります。 –

+0

置き換えが正常に動作し、文字列「提供されたユーザー名またはパスワードが正しくありません」が表示されます。ユーザー名とパスの組み合わせが存在しない場合私はなぜクライアント側の検証がもう動作しないのか - mvcプロジェクトに付属している基本的なログインフォームbtw – raklos

答えて

2

クライアント側の検証は、フォームのポストによってトリガされていない、あなたは、もはやフォームを掲載しているので、あなたは、本質的に検証トリガを回避するjQueryのポストを行っています。あなたは手動でjavascriptのバリデーションをトリガし、クライアント側の検証でエラーが見つかったかどうかを確認し、そうでない場合はajax投稿を続行できます。

編集:Here's the documentationその方法については、コードはこのようになります....

$("#submit").click(function (e) { 
      e.preventDefault(); 
      $(this.form).validate(); 
      if($(this.form).valid()) 
{ 
      $.post("Account/LogOn", 
        $(this.form).serialize(), 
        function (data) { 
         if (data.redirect) { 
          // data.redirect contains the string URL to redirect to 
          window.location.href = data.redirect; 
         } 
         else { 
          // data.form contains the HTML for the replacement form 
          $("#error").replaceWith(data.error); 
         } 
        }, 
        'json' 
      ); 
      return false; 
} 
     }); 
+0

どうすれば手動でバリデーションを起動できますか? - ありがとう – raklos

+0

使用している検証フレームワークによって異なります。 jqueryの検証はおそらくこのようになります... http://docs.jquery.com/Plugins/Validation/valid。解明のために私の答えを編集しました。 –

関連する問題