サーバーで検証する必要がある 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);
}
私は何を間違っていますか?