簡単な登録フォームには、「優先ログインID(ユーザー名)」フィールドがあります。ユーザーが電子メールを入力するとすぐに、入力したユーザー名(既に存在するかどうか)をデータベース値と比較して検証します。このために、jqueryの$.ajaxメソッドを使用してサーバー呼び出しを行っています。
<script>
$('#txtPreferredLogin').focusout(function () {
$.ajax({
type: "POST",
url: "../Login.aspx/CheckUserName",
async: false,`enter code here`
data: "{userName: '" + $('#txtPreferredLogin').val() + "' }",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (response) {
$('#valid').html("<img src='Images/waiting.gif' alt='Checking username!'>");
var delay = function () {
AjaxSucceeded(response);
};
setTimeout(delay, 500);
},
failure: function (response) {
alert(response.d);
}
});
});
function AjaxSucceeded(result) {
if (result.d == true) {
$('#valid').html("<img src='Images/2_Not.png' alt='Username taken!'>");
}
else {
$('#valid').html("<img src='Images/1_available.png' alt='Username available!'>");
}
}
$.validator.addMethod('notNone', function (value, element) {
return (value != '0');
});
$(function () {
$("#regi1").validate(
{
rules:
{
ddlCity:
{
required: true,
notNone: true
},
txtDOB:
{
required: true,
dpDate: true
}
},
messages: {
ddlCity: "Please select city",
txtDOB: "Please enter a valid date (dd-mm-yyyy)"
}
});
});
</script>
サーバー側のコードは
public bool getVal(string userName)
{
var query = from p in context.tblBasicDetails
where p.LoginId == userName.Trim()
select p;
if (query.Any())
{
return true;
}
else
{
return false;
}
}
[WebMethod]
public static bool CheckUserName(string userName)
{
Login l = new Login();
return (l.getVal(userName));
}
これで、ユーザー名が使用できない場合、使用できないというメッセージ(画像)が表示されます。しかし、これらのフィールドの下に[保存]ボタンがあり、クリックするとフォーム全体が検証されます。つまり、ユーザー名が使用できない場合を除いて、すべてのフィールドが有効になるまでページをポストバックしません。ユーザー名が利用できない場合は、ポストバックを実行したくありません。コードでどのような変更を行う必要がありますか?