2012-04-20 8 views
1

jquery ajax 호출 asp.net 웹 서비스 질문이 있습니다. asp.net 웹 페이지의 텍스트 상자의 유효성을 검사하고 싶습니다. 유효성 검사기는 다음과 같습니다ValidateUserName is undefined

<asp:CustomValidator ID="CustomValidatorUser" runat="server" ControlToValidate="TextUserName" 
           ErrorMessage="Minimum of 6 (six) alphanumeric characters." 
       ClientValidationFunction="ValidateUserName" Display="Dynamic" 
           ValidateEmptyText="True" ></asp:CustomValidator> 

JQuery와 코드 (업데이트 2)입니다 : 웹 서비스 코드는

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="server"> 
<script src="../jquery-1.7.2.min.js" type="text/javascript"></script> 
<script> 
$.ajax({ 
    type: "POST", 
    url: "UserNameWebService.asmx/ValidateUserName", 
    data: "{'strUsername': " + $("#TextUserName").val() + "}", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json" 
}); 
</script> 
<div> 
    General user information</div> 
<p> 
</p> 
<table cellpadding="2"> 

입니다

:

[WebService(Namespace = "http://tempuri.org/")] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
[System.ComponentModel.ToolboxItem(false)] 
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
[System.Web.Script.Services.ScriptService] 
public class UserNameWebService : System.Web.Services.WebService 
{ 

    [WebMethod] 
    public bool ValidateUserName(string strUsername) 
    { 
     string UserNameCreated = strUsername; 
     string AD_Server = System.Configuration.ConfigurationManager.AppSettings["AD_Server"]; 
     DirectoryEntry entry = new DirectoryEntry(AD_Server); 
     entry.AuthenticationType = AuthenticationTypes.Secure; 

     DirectorySearcher deSearch = new DirectorySearcher(entry); 
     deSearch.Filter = "(&(objectClass=user)(samaccountname=" + UserNameCreated + "))"; 

     SearchResultCollection results = deSearch.FindAll(); 
     Match match = Regex.Match(UserNameCreated, @"^[a-zA-Z0-9]{6,}$", RegexOptions.IgnoreCase); 
     if (results.Count > 0) 
      return false; 
     else if (match.Success) 
      return true; 
     else 
      return false; 
    } } 

그러나 나는 오류가 있어요 :

ValidateUserName is undefined. 

제발 도와주세요 e를 눌러 오류를 정정하십시오.

대단히 감사합니다!

+0

전체 유효성 확인 기능을 표시 할 수 있습니까? – mellamokb

+0

완료. 제발 조언 해주세요. –

+0

죄송합니다, 자바 스크립트 기능을 의미합니다. – mellamokb

답변

1

실제로 코드에 몇 가지 문제가 있습니다.

1) $("#TextUserName")은 asp.net이 서버 측 TextBox 컨트롤을 다른 ID로 렌더링하므로이 컨텍스트에서는 작동하지 않습니다. 대신이 작업을 수행해야합니다 :

     |            | 
         V            V 
data: "{'strUsername': '" + $("#<%=TextUserName.ClientID%>").val() + "'}", 

3)가 필요합니다

data: "{'strUsername': " + $("#<%=TextUserName.ClientID%>").val() + "}", 

2) 데이터 속성의 JSON가 제대로 포맷되지,이 같은 값 주위에 작은 따옴표 ' 필요 Jquery ajax 호출을 함수 안에 넣으십시오.이 경우 함수는 ValidateUserName입니다. sourceargs의 두 매개 변수가 필요합니다. 이 함수의 책임은 args.IsValid의 값을 true 또는 false 중 하나로 설정하는 것입니다. 따라서이 논리를 수행 할 수있는 ajax 호출이 성공할 때 호출 할 함수를 제공해야합니다. 이처럼 :

function ValidateUserName(source, args) { 
    $.ajax({ 
     type: "POST", 
     url: "UserNameWebService.asmx/ValidateUserName", 
     data: "{'strUsername': '" + args.Value + "'}", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     async: false, 
     success: function (result) { 
      args.IsValid = result.d; 
     } 
    }); 
} 

4) 위의 코드에서 볼 수 있듯이, 당신은 실제로 당신이 args.Value처럼 액세스 할 수 있기 때문에 텍스트 상자에서 값을 얻기 위해 jQuery를 사용할 필요가 없습니다.

5) IsValid이 설정 될 때까지 async: false을 추가해야합니다. 메시지의 가시성을 설정하는 코드는 이미 실행되어 있으므로 아무 것도 발생하지 않습니다.

1

함수 호출 ValidateUserName에 ajax 함수를 넣어야 ClientValidationFunction과 일치합니다.

function ValidateUserName(){ 
    $.ajax({ 
    type: "POST", 
    url: "UserNameWebService.asmx/ValidateUserName", 
    data: "{'strUsername': " + $("#TextUserName").val() + "}", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json" 
    }); 
} 

그럼에도 불구하고이 값은 반환되지 않습니다. 함수로 돌아 가기 위해 부울 값을 설정하려면 $.ajax 함수의 success 옵션을 사용해야한다고 생각합니다. 나는 또한 false로 async를 설정 한

function ValidateUserName(){ 
    var isValid; 
    $.ajax({ 
    type: "POST", 
    url: "UserNameWebService.asmx/ValidateUserName", 
    data: "{'strUsername': '" + $("#TextUserName").val() + "'}", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json" 
    , async: false 
    , success: function(data){ 
     isValid = data; 
    } 
    }); 
    return isValid; 
} 

주의 사항 :

그래서 당신은 같은 일을 할 것입니다.

관련 문제