私たちのアプリは ASP.NET MVC 3 を使用しており、クライアント側とサーバー側の両方で機能するカスタム検証属性の作成を利用したいと考えていました。
ユーザーは入力フィールドに医師番号を入力します。この値は、入力された医師番号が実際に有効かどうかを確認するために使用されます。これには、データベースへの呼び出しが必要です。検証メソッド内に ajax 呼び出しがあります。これは正常に機能しますが、async が false に設定されている場合のみです。
<script type="text/javascript">
$.validator.setDefaults({
debug: true,
onkeyup: false,
onclick: false,
focusInvalid: false
})
$.validator.addMethod('physician', function (value, element, params)
{
var request = $.ajax({
type: "POST",
url: "@Url.Content("~/patient/GetPhysicianById")",
data: { physicianNumber: value },
async: false,
beforeSend: function(xjhr, settings) {
var siblings = $(element).siblings('.physician-response');
//$(siblings[0]).html("<img src=\"/content/images/ajax-loader.gif\" />");
}
});
console.log(request);
if(request.responseText == "0")
return false;
return true;
});
$.validator.unobtrusive.adapters.add('physician', ['param1', 'param2'], function (options) {
options.rules['physician'] = options.params;
options.messages['physician'] = options.message;
});
</script>
フォームには、このメソッドをトリガーする 3 つの異なる医師の入力があります。ぼかしが失われるたびに、これらの呼び出しが再度実行されます。ユーザーが保存をクリックしたときにも実行されます。これが本当に適切なアプローチであるかどうかはわかりません。または、この検証を別の方法で処理する必要があります。