我们的应用程序使用 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>
在表格上,有三种不同的医生输入将触发此方法。每次模糊丢失时,它都会再次运行这些调用。当用户单击保存时也会运行。我不确定这是否真的是正确的方法,或者我应该以单独的方式处理此验证。