我有一个包含 ZipCode 字段的页面,我需要在服务器上进行验证。加载页面时,ZipCode 必须已经从某个外部源预填充。
我添加了一个 jquery 远程验证器来验证这个字段: $(document).ready(function () {
$("#Buyer_ZipCode").rules("add", {
remote: { url: zipcodeValidationUrl, async: false },
messages:
{
remote: "Cannot determine location for given zip code."
}
});
var zipcode = $("#Buyer_ZipCode");
if (zipcode.val().length > 0) {
zipcode.trigger('blur');
};
});
为了在页面加载后立即执行操作,我添加了一个模糊触发器。我的模糊处理程序:
$("#Buyer_ZipCode").bind('blur', function (e) {
//some actions
element = $(e.target);
if (!element.valid()) {
console.log(element.val());
// Invalidate lookup target control.
targetCity.get(0).value = "";
targetState.get(0).value = "";
return;
};
// yet some actions
});
一切正常,除了页面加载的情况,我们已经有了 ZipCode 字段的值。在这种情况下,valid() 方法总是返回 false,但是远程验证不是异步的,服务器确实返回 true。顺便说一句,这是我的验证控制器
public JsonResult IsZipCodeValid([NestedFieldModelBinder]string Buyer_ZipCode)
{
if (Utils.GetZipcode(Buyer_ZipCode) != null)
{
return Json(true, JsonRequestBehavior.AllowGet);
}
return Json("Cannot determine location for given zip code.", JsonRequestBehavior.AllowGet);
}
我究竟做错了什么?