1

jquery ajax call asp.net Web サービスに関する質問があります。asp.net Web ページのテキスト ボックスを検証したい。バリデータは次のとおりです。

<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">

Web サービス コードは次のとおりです。

[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.

エラーを修正するのを手伝ってください。

どうもありがとうございました!

4

2 に答える 2

1

実際、コードにはいくつかの問題があります。

1) asp.net はサーバー側のコントロールを別の ID で$("#TextUserName")レンダリングするため、このコンテキストでは機能しません。TextBox代わりにこれを行う必要があります:

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

'2) データ属性の json が正しくフォーマットされていません。次のように値を一重引用符で囲む必要があります。

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

3) Jquery ajax 呼び出しを関数内に配置する必要があります。この場合はValidateUserName. と の 2 つのパラメータsourceを取りますargs。この関数の役割は、 の値を または のいずれかに設定することargs.IsValidです。したがって、このロジックを実行できる ajax 呼び出しが成功したときに呼び出される関数を提供する必要があります。このような:truefalse

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) 上記のコードでわかるように、テキスト ボックスから値を取得するために jquery を実際に使用する必要はありません。このようにアクセスできるからですargs.Value

async: false5)それ以外の場合は、設定するまでに追加する必要がありIsValidます。メッセージの可視性を設定するコードは既に実行されているため、何も起こりません。

于 2012-04-21T00:55:54.480 に答える
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"
  });
}

それでも、これは値を返しません。関数に返すブール値を設定するには、関数のsuccessオプションを使用する必要があると思います。$.ajax

したがって、次のようにします。

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

asyncまた、falseに設定していることに注意してください。

于 2012-04-21T00:28:16.703 に答える