2011-02-14 53 views
1

我有一個註冊表單,帶有多個驗證器控件。我通過 AJAX(使用jQuery,而不是UpdatePanel)來驗證用戶名可用性。如果使用用戶名,我想讓頁面無效,就像其他ASP.NET驗證器從我的JavaScript函數中執行的那樣。這可能嗎?例子?通過JavaScript使頁失效

這是我目前的功能:

// In head... 
<script type="text/javascript"> 
$(document).ready(function() { 
    $('#<%= username.ClientID %>').blur(function() { 

     $.ajax({ 
      type: 'POST', 
      contentType: 'application/json; charset=utf-8', 
      url: 'MyService.asmx/CheckAvailability', 
      dataType: 'json', 
      data: '{ "username": "' + username + '" }', 
      success: function (response) { 

       // stuff 

       // If username is taken, invalidate 

      }, error: function() { /* stuff */ } 
     }); 
    }); 
}); 
</script> 

// The markup... 
<dl><dt>Username</dt> 
<dd> 
    <asp:textbox id="username" runat="server" /> 
    <asp:requiredfieldvalidator id="usernameRequiredValidator" runat="server" 
     controltovalidate="username" 
     errormessage="Required" 
     display="Dynamic" /> 
    <span id="avail_response"></span> 

<!-- More stuff... --> 
+3

您能否解釋一下您的意思是「使頁面無效」? 或者舉個例子。 。 – 2011-02-14 15:16:27

+0

當您的某個表單元素爲「無效」時,用戶無法提交表單。這是使用ASP.NET驗證控件自動處理的。我想從我的AJAX函數中鉤住這個功能。 – Didaxis 2011-02-14 15:18:32

回答

2

This link提供ASP.Net驗證了深入的解釋。向下滾動到「客戶端API」段落,在該段落中說明您可以設置Page_IsValid變量。但是,要警告的是,不能保證這個API在將來的.NET版本中保持不變,所以請檢查Page_IsValid是否存在。

編輯:

對不起,我在以前的評論我是有點過了趕時間,我剛纔已經回答了你的問題不看大局。我剛剛重讀了你的問題,事實上,它什麼也不做,因爲當你點擊提交按鈕時,它會觸發所有驗證器的重新驗證。由於文本框的用戶名有一個值,您的requiredvalidator有效並且表單提交。

我認爲,從長遠來看,(和一個不直接調用.NET的JavaScript函數)一個更好的解決方案如下:

  1. 添加一個隱藏字段
  2. 創建一個RequiredFieldValidator隱藏的 場
  3. 放置的RequiredFieldValidator背後的第一requiredvalidator,並給它相同的ErrorMessage作爲requiredvalidator
  4. 將在隱藏領域的一些價值 您成功功能,如果 用戶名可用,在所有其他 的情況下,使隱藏字段爲空。

這是一個繞道而行,但它的未來證明&比找出如何使用.NET驗證框架的JavaScript函數更容易。