我正在尝试使用jQuery 验证远程方法来检查值是否是唯一的 在提交时添加规则以防止在每次击键时触发它
var Id = $("#id").val();
$('#form').on('submit', function (e) {
e.preventDefault();
var newValue = $('#input').val();
$('#input').rules('add', {
'remote': {
url: '/MyController/CheckValue',
type: 'POST',
data: {
id: Id,
value: newValue
}
},
messages: {
'remote': 'This value is not valid'
}
});
if ($('#form').valid()) {
window.console.log('valid')
// do something
}
$('#input').rules('remove', 'remote');
});
调用服务后,该操作返回 true 或 false
[HttpPost]
public JsonResult CheckValue(int? id, string value)
{
bool available;
using (var myServiceClient = new MyServiceClient())
{
available = myServiceClient.IsValueAvailable(id, value);
}
return this.Json(available);
}
该规则工作正常,但每次都$('#form').valid()
返回,true
因为它没有等待远程规则完成它的调用。
这篇文章建议async: false
在远程规则声明中使用,但这会冻结浏览器。文档中的示例没有使用它,因此没有它应该可以工作。
我的验证规则有问题吗?