2011-11-17 9 views
5

登録ページを実行しているときにデータベース内のユーザー名の存在をチェックするシナリオがあります。このために私は私のモデルリモート検証属性に遅延を追加するMVC3

[Remote("CheckUserNameAvaliable", "User", Httpmethod="Post")] 
public string Username {get; set;} 

をリモート検証のためのリモート属性を実装していると、私の方法は次のようになります。この

[HttpPost] 
public JsonResult CheckUserNameAvaliable(string UserName) 
{ 
    SessionUser currentUser = this.sessionHelper.GetCurrentUser(); 
    User user = this.userService.GetByUsername(UserName); 
    if (user != null && user.Id != currentUser.Id) 
    { 
     return Json(false); 
    } 

    return Json(true); 
} 

それは私のために正常に動作しますが、問題は、我々はキーを作ったときにということですユーザー名のテキストボックスには、このリモート検証がファイルされますが、私の要件によると、このリモート検証はユーザー名のテキストボックスに値を入力した後でなければなりません。そのために、リモート検証属性に強制的に遅延を追加できますか?

MVC3でリモート検証に遅延を追加する方法を知っていますか?

答えて

2

を望むものを私はMVC3とリモート検証を持つ前に、同様の問題に巻き込まれています。あなたは、イベントがあなたがうまくいけば、これは

ASP.NET Remote Validation only on blur?

+0

答えは良いですが、問題はそれがグローバルに設定されていることですが、特定のページで指定したい場合は非常に奇妙です。 –

+1

セレクタに置くことができます:$( "。selector")。validate({onkeyup:false}); –

0

あなたがしてからkeyupではなく、ぼかしにthisを検証したくない場合は、あなたが

+0

回答は良いですが、問題はそれがグローバルに設定されているということですが、特定のページで指定したい場合は、かなり奇妙です。 –

3

MVC3ブラウザでjquery.validateプラグインを使用するのに役立ちます。..

リモート検証を伝えたいかどうかはわかりブラーに解雇ではなく、したいと思います。 jquery.validateを使用すると、フィールドの最初の変更とぼかしまで、またはフィールドに触れていない場合はサブミット時まで、フィールドの検証は開始されません。

フィールドのフィールド検証が開始されると、バリデータのonkeyup設定は、各keyupイベントに対して検証が実行されるかどうかを制御します。すべてのキーを押すフィールドでリモート検証を実行しているのであれば、クライアントとサーバーの両方に重大なAjaxメッセージが送信されている可能性があります。

他のレスポンダが述べたように、validator.settings.onkeyup = falseを設定することでキーアップ検証を抑制できますが、リモート検証ルールを持つものだけでなく、すべてのフォームフィールドでonkeyup検証を抑制します。私が提案するのは、リモート検証を行っているフィールドにフォーカスがある間にキーアップを抑制し、フィールドをぼかすときに再びオンにすることです。

onkeyupを抑制するのは簡単です。問題は、設定をfalseからtrueに変更しても、機能が再びオンにならないことです。これを元に戻すには、$ .validatorオブジェクトのデフォルトで定義されている関数に設定する必要があります。

MVCの邪魔にならない検証を使用している場合は、ここにあなたのページに含めるjavascriptコードです。あなたのページのすべてのフォームをカバーします。以前のバージョンは、IE 7または8(ええ、私はあまりにも、それらのユーザーをサポートする必要がある)と正しく動作しない原因と」以降のjquery.validateバージョン1.9.0以上を使用してください:

$("form input[data-val-remote-url]").on({ 
     focus: function() { 
      $(this).closest('form').validate().settings.onkeyup = false; 
     }, 
     blur: function() { 
      $(this).closest('form').validate().settings.onkeyup = 
       $.validator.defaults.onkeyup; 
     } 
    }); 
関連する問題