Проверка на наличността на имейл с VB.NET WebMethod + JSON + CustomValidator

Прочетох няколко публикации за този проблем (тук и в други сайтове), но никой не работи за мен. Опитвам се да проверя дали даден имейл вече е регистриран в база данни по време на процеса на регистрация.

Имам страница, наречена Register.aspx, в която съм декларирал следната JavaScript функция:

function check_email_availability(src, args) {
  $.ajax({
    type: "POST",
    async: false,
    timeout: 500,
    contentType: "application/json",
    url: "Register.aspx/CheckEmailAvailability",
    data: "{ 'email' : '" + args.Value + "' }",
    success: function (result) {
      args.IsValid = result.d;
    }
  });
}

От друга страна, в кода отзад в Register.aspx.vb имам следното WebMethod:

<System.Web.Services.WebMethod()> _
Public Shared Functiion CheckEmailAvailability(ByVal email As String) As String
  If Membership.GetUser(email) Is Nothing Then
    Return "True"
  Else
    Return "False"
End Function

Опитвам се да стартирам функцията JavaScript чрез CustomValidator, но получавам следното съобщение от конзолата на Chrome:

Uncaught TypeError: Cannot read property 'Value' of undefined

Грешката се появява точно в реда

data: "{ 'email' : '" + args.Value + "' }",

така че -винаги използвайки Chrome-, зададох точка на прекъсване на този ред и от конзолата написах

args.Value

и получих правилната стойност, т.е. имейл адреса, който бях въвел. Така... аз съм малко изгубен.

Оценявам всяка помощ.


person adripanico    schedule 26.09.2012    source източник
comment
Вместо да оценявате в конзолата (която може да има множество контексти), опитайте да маркирате този израз и да го наблюдавате.   -  person Steve Campbell    schedule 26.09.2012
comment
Утре сутринта ще ви кажа резултатите. Благодаря!   -  person adripanico    schedule 27.09.2012


Отговори (1)


Е, най-накрая успях. Споделям тук използвания код. За да вляза в контекста, в процеса на регистрация на потребител искам да проверя наличността на имейл.

В главата на Register.aspx:

<script type="text/javascript">
  function check_email_availability(src, args) {
    var isValid;
    $.ajax({
      type: "POST",
      url: "Register.aspx/CheckEmailAvailability",
      timeout: 500,
      data: "{'email' : '" + args.Value + "'}",
      contentType: "application/json; charset=utf-8",
      async: false,
      success: function (result) {
                 isValid = result.d;
               }
    });
    args.IsValid = isValid;
  }
</script>

В тялото на Register.aspx:

<asp:TextBox ID="tbEmail" runat="server" CssClass="TextBox" ClientIDMode="Static" TabIndex="1" />
<asp:CustomValidator ID="CValidatorEmail" runat="server" ControlToValidate="tbEmail" ValidateEmptyText="false" ClientValidationFunction="check_email_availability" ErrorMessage="Email already in use" SetFocusOnError="True" />

В кода отзад (Register.aspx.vb):

<System.Web.Services.WebMethod()> _
Public Shared Function CheckEmailAvailability(ByVal email As String) As Boolean
    Dim oMU As MembershipUser = Membership.GetUser(email)
    If oMU IsNot Nothing Then Return False Else Return True
End Function

Надявам се това да е полезно за някого. Има въпрос, почти идентичен при използване на C#, който ми помогна да го накарам да работи .

За разбирането,

person adripanico    schedule 14.12.2012