2010-09-24 44 views
0

我正在執行一個針對電子郵件地址的ajax驗證。我需要知道用戶是否已經註冊,所以我需要在我的數據庫中檢查它。有類似的例子:http://www.highoncoding.com/Articles/439_Performing_Instant_UserName_Availability_Check_Using_JQuery_Ajax_API.aspx使用asp.net ajax檢查電子郵件的可用性,並使頁面無效(如果存在)

我當前的代碼是:

function validateEMail(email) { 
    $.ajax({ 
     type: "POST", 
     contentType: "application/json; charset=utf-8", 
     url: "ajax/services.asmx/validateEMail", 
     data: "{'email': '" + email + "'}", 
     dataType: "json", 
     success: function (result) { 
      $("#<%=lEMail.ClientID %>").html(result.d.result); 
     } 
    }); 
} 

和服務器功能:

public class EMailValidateResult 
{ 
    public bool valid { get; set; } 
    public string result { get; set; } 
} 

[WebMethod] 
public EMailValidateResult validateEMail(string email) 
{ 
    EMailValidateResult result = new EMailValidateResult(); 

    result.valid = false; 
    result.result = "<img src=\"icons/accept.png\" title=\"E-Mail is valid\" />"; 

    return result; 
} 

我需要拒絕用戶網頁提交如果電子郵件已經存在。

+0

你似乎有一個全功能的驗證功能 - 是正確的?如果不是,那麼*不*按預期工作?此外,你沒有提及你當前的回發/驗證功能。你想禁止回傳的形式是什麼樣子? – 2010-09-24 07:53:51

+0

這是一個標準的asp.net窗體。我有一個回發按鈕,需要檢查一個全局變量。 – 2010-09-24 07:59:02

回答

1

使用的CustomValidator:

<asp:CustomValidator ID="cvEMail" runat="server" ControlToValidate="tEMail" 
Display="None" ClientValidationFunction="validateEMail" 
OnServerValidate="cvEMail_ServerValidate"/> 
<span id="lEMail" runat="server"></span> 

客戶端的JavaScript:

<script type="text/javascript"> 
    function validateEMail(source, arguments) { 
     var isValid; 

     $.ajax({ 
      type: "POST", 
      contentType: "application/json; charset=utf-8", 
      url: "ajax/services.asmx/validateEMail", 
      data: "{'email': '" + arguments.Value + "'}", 
      dataType: "json", 
      async: false, 
      success: function (result) { 
       $("#<%=lEMail.ClientID %>").html(result.d.result); 
       isValid = result.d.valid; 
      } 
     }); 

     arguments.IsValid = isValid; 
    } 
</script> 

服務器端AJAX功能:

[WebMethod] 
public EMailValidateResult validateEMail(string email) 
{ 
    EMailValidateResult result = new EMailValidateResult(); 

    result.valid = false; 
    result.result = "Invalid..."; 

    if (Regex.IsMatch(email,@"\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*")) 
    { 
     result.valid = true; 
     result.result = "Valid..."; 
    } 
    else if(check if exists in database) 
    { invalid, exists message... } 

    return result; 
} 

服務器端驗證處理程序:

protected void cvEMail_ServerValidate(object source,ServerValidateEventArgs args) 
{ 
    args.IsValid = false; 
    lEMail.InnerHtml = "invalid..."; 

    if(Regex.IsMatch(args.Value,@"\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*")) 
    { 
     args.IsValid = true; 
     lEMail.InnerHtml = "valid..."; 
    } 
    else if(check if exists in database) 
    { invalid, exists message... } 
} 

來源:http://brian.dobberteen.com/code/jquery_ajax_custom_validator/

+0

也是非常有趣的方式。 +1 – Aristos 2010-09-24 11:43:07

1

在客戶端設置一個全局變量來允許或不允許表單提交基於您在ajax調用上設置的電子郵件用戶標誌。

var eMailExist = false; 

function AllowPostBack() 
{ 
    if(eMailExist) 
    alert("This email all ready exist"); 

    return !eMailExist; 
} 

在表單標籤

onsubmit="return AllowPostBack();" 

關於你的AJAX調用你的JSON返回,如果存在

function validateEMail(email) { 
    $.ajax({ 
     type: "POST", 
     contentType: "application/json; charset=utf-8", 
     url: "ajax/services.asmx/validateEMail", 
     data: "{'email': '" + email + "'}", 
     dataType: "json", 
     success: function (result) { 
      $("#<%=lEMail.ClientID %>").html(result.d.result); 
      eMailExist = result.d.valid; 
     } 
    }); 
} 

在後再次檢查,對JavaScript的dissabled的情況。

0

我認爲你需要設置Page_IsValid假在你的成功回調

+0

我試過了,但我認爲無法設置它或其他驗證使其成爲現實。 – 2010-09-24 08:01:57

相關問題