2011-11-17 57 views
5

我有一個senario,我必須檢查數據庫中的用戶名存在,同時做一個註冊頁面。爲了這個,我已經在我的模型添加延遲到遠程驗證屬性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 =假KEYUP驗證,但抑制的onkeyup驗證所有的表單域,不只是那些與遠程驗證規則。我的建議是,當你使用遠程驗證的字段具有焦點時,你禁止使用密碼,然後在模糊字段時將其重新打開。

抑制onkeyup很容易。問題是將設置從false更改爲true不會重新啓用該功能。要重新打開它,您需要將其設置爲在$ .validator對象的默認值中定義的函數。

如果您使用MVC不顯眼的驗證,以下是要包含在您的頁面上的JavaScript代碼。它將涵蓋您網頁上的所有表單。並且一定要使用jquery.validate版本1.9.0或更高版本「原因更早版本不與IE 7或8個正常工作(是的,我要支持過這些用戶):

$("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; 
     } 
    });