Проверьте доступность электронной почты с помощью asp.net ajax и сделайте страницу недействительной, если существует - PullRequest
0 голосов
/ 24 сентября 2010

Я пытаюсь выполнить проверку ajax для адреса электронной почты.Мне нужно знать, если пользователь уже зарегистрирован, поэтому мне нужно проверить это в моей базе данных.Вот аналогичный пример: http://www.highoncoding.com/Articles/439_Performing_Instant_UserName_Availability_Check_Using_JQuery_Ajax_API.aspx

Мой текущий код:

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;
}

Мне нужно запретить страницу пользователяобратная передача, если электронная почта уже существует.

Ответы [ 3 ]

1 голос
/ 24 сентября 2010

Используя 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/

1 голос
/ 24 сентября 2010

На стороне клиента задайте глобальную переменную, чтобы разрешить или запретить отправку формы на основании флага пользователя электронной почты, установленного при вызове 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.

0 голосов
/ 24 сентября 2010

Я думаю, вам нужно установить Page_IsValid в false при вашем обратном вызове

...