2013-01-14 4 views
1

Я получаю ошибку JavaScript (только в IE), и я не могу понять, почему. Я предполагал, что это была запятая или что-то, но я не могу ее найти. Я надеюсь, что я что-то пропустил, и, возможно, один из вас увидит, что я пропустил.Ошибка 'controltovalidate' в IE8

Мой контроль и валидатора:

<asp:TextBox runat="server" ID="txtName" MaxLength="100" CssClass="styled" Columns="50" /> 
           <asp:CustomValidator runat="server" ID="cvName" ErrorMessage="Enter a valid contact name or email address" ControlToValidate="txtName" Display="None" ValidationGroup="PlatformContact" ClientValidationFunction="doesUserExist" /> 
           <asp:ValidatorCalloutExtender ID="vceName" runat="server" TargetControlID="cvName" WarningIconImageUrl="~/img/icons/ic_asterisk.gif" CssClass="validatorStyled" PopupPosition="Right" CloseImageUrl="~/img/icons/ic_x_close_orange.png" />          
           <asp:RequiredFieldValidator runat="server" ID="valName" ErrorMessage="Enter a contact name or email address" ControlToValidate="txtName" Display="None" ValidationGroup="PlatformContact" /> 
           <asp:ValidatorCalloutExtender ID="vceNameRequired" runat="server" TargetControlID="valName" WarningIconImageUrl="~/img/icons/ic_asterisk.gif" CssClass="validatorStyled" PopupPosition="Right" CloseImageUrl="~/img/icons/ic_x_close_orange.png" /> 

А вот JavaScript/JQuery Я использую:

<script language="javascript" type="text/javascript"> 
    var userExists = true; 

    function doesUserExist(source, args) { 
     var txtName = $('#<%= txtName.ClientID %>').val(); 
     $.ajaxSetup({ cache: false }); 
     $.ajax({ 
      type: "POST", 
      contentType: "application/json", 
      data: "{name:'" + txtName + "'}", 
      url: "ManageMyContacts.aspx/DoesUserExist", 
      dataType: "json", 
      success: function (result) { 
       userExists = result.d; 
      }, 
      error: function (XMLHttpRequest, textStatus, errorThrown) { 
       //Something bad happened,redirect to login page 
       window.location.href = '<%= ResolveUrl("~/Default.aspx") %>'; 
      } 
     }); 
     args.IsValid = userExists; 
    } 
</script> 

Любое понимание очень ценится.

EDIT: ошибка JavaScript

Сообщение: 'ControlToValidate' равно нулю или не является объектом

Вот пользователь WebMethod я для проверки имени пользователя (в код)

[WebMethod(EnableSession = true)] 
    public static bool DoesUserExist(string name) 
    { 
     ManageMyContactsService service = new ManageMyContactsService(); 
     int index = name.IndexOf("[") + 1; 
     if (index > 0) 
     { 
      string email = name.Substring(index, name.Length - (index + 1)); 
      return service.DoesUserExist(email); 
     } 
     else if (name.IndexOf("@") == -1) 
      return false; 
     else 
      return service.DoesUserExist(name); 
    } 

Я заметил, что функция doesUserExist вызвана дважды по какой-либо причине, может кто-нибудь сказать, почему из этого кода?

+0

Можете ли вы опубликовать ошибку javascript и примерно в какой строке это произойдет, если вы это нашли? – Rhumborl

+1

Не связано, вероятно, но ваш код также не работает должным образом, потому что 'userExists'' undefined', когда 'args.IsValid = userExists' запускается, потому что ajax является асинхронным. Ваш код выглядит действительным, я подозреваю, что ошибка, которую вы получаете, связана либо с C#, либо с чем-то еще. –

+0

@KevinB, возможно, это связано, не помню, как проверяет asp.net, но если это не правда или ложно, это может сработать. – Rhumborl

ответ

0

Кажется, что UpdatePanel вызывал второй вызов ajax и заставлял IE бросать ошибку JS. Работал отлично в других браузерах, но не в IE7/8!

Надеюсь, что это поможет кому-то с подобной проблемой.

Смежные вопросы